partoftheworlD Опубликовано 26 сентября, 2016 Поделиться Опубликовано 26 сентября, 2016 Столкнулся с проблемой, как найти место откуда вызывается функция, если вызов происходит через регистр? Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 26 сентября, 2016 Поделиться Опубликовано 26 сентября, 2016 (изменено) ты имеешь ввиду виртулаьный метод? тогда ставить бряк на на чало вызова функции, как и во всяком случае Изменено 26 сентября, 2016 пользователем Dino Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 26 сентября, 2016 Автор Поделиться Опубликовано 26 сентября, 2016 27 минуты назад, Dino сказал: ты имеешь ввиду виртулаьный метод? тогда ставить бряк на на чало вызова функции, как и во всяком случае В смысле, что где-то в памяти есть вызов call edx допустим, и в edx передается адрес функции. Вот у меня есть адрес функции, но я не могу определить откуда он вызывается т.е 1234 по примеру. 0x1234<- call edx (call func()) ... func() <- Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 26 сентября, 2016 Поделиться Опубликовано 26 сентября, 2016 Если известен адрес функции , ьто просто ставишь breakpoint на начало вызова и на верхушке стека находишь адрес(это адрес от куда произошел вызов). Nными словами я не знаю как это объяснить. Ollydbg, CE, IDA в помощь 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 26 сентября, 2016 Поделиться Опубликовано 26 сентября, 2016 Привет! Смотри выше по коду, что происходит с EBX. Значение адреса функции не берется из воздуха. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 26 сентября, 2016 Автор Поделиться Опубликовано 26 сентября, 2016 (изменено) Спасибо, за ответы, нашел. 8 минут назад, keng сказал: Привет! Смотри выше по коду, что происходит с EBX. Значение адреса функции не берется из воздуха. А выше только пролог был. Я совершенно забыл про стек с этим статическим анализом. Второй месяц пытаюсь найти рисующую функцию в Dishonored, проверил функцию и восстановил еще десяток включающих в себя функций, возможно выше будет код установки цвета отрисовки моделек при темном зрении. Изменено 26 сентября, 2016 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 27 сентября, 2016 Поделиться Опубликовано 27 сентября, 2016 По-моему, большинство компиляторов стараются передавать аргументы через стек, тк это банально удобнее, а регистры можно и более эффективно использовать. А пролог и эпилог, к слову, можно отладчик научить игнорировать и не показывать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 27 сентября, 2016 Поделиться Опубликовано 27 сентября, 2016 1 час назад, keng сказал: По-моему, большинство компиляторов стараются передавать аргументы через стек, тк это банально удобнее, а регистры можно и более эффективно использовать. А пролог и эпилог, к слову, можно отладчик научить игнорировать и не показывать. речь идет о вызове функции через регистр, а не передачи аргументов. происходит обращение к таблице виртуальных методов объекта, затем в регистр запихивается необходимая функция ... mov eax,[ecx] mov eax,[eax+0x0C] //4ая функция call eax Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 27 сентября, 2016 Поделиться Опубликовано 27 сентября, 2016 2 hours ago, Dino said: речь идет о вызове функции через регистр, а не передачи аргументов. происходит обращение к таблице виртуальных методов объекта, затем в регистр запихивается необходимая функция ... mov eax,[ecx] mov eax,[eax+0x0C] //4ая функция call eax Да я понял, я говорил о том, что обычно выше по коду параметры пихаются через стек, а не регистры. Частенько VMT вообще компилирует в длинную простыню jmp-ов. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения