Перейти к содержанию

Определение места вызова функции


Рекомендуемые сообщения

ты имеешь ввиду виртулаьный метод? тогда ставить бряк на на чало вызова функции, как и во всяком случае

Изменено пользователем Dino
Ссылка на комментарий
Поделиться на другие сайты

27 минуты назад, Dino сказал:

ты имеешь ввиду виртулаьный метод? тогда ставить бряк на на чало вызова функции, как и во всяком случае

В смысле, что где-то в памяти есть вызов call edx допустим, и в edx передается адрес функции. Вот у меня есть адрес функции, но я не могу определить откуда он вызывается т.е 1234 по примеру.

0x1234<- call edx (call func())
...
func() <-

 

Ссылка на комментарий
Поделиться на другие сайты

Если известен адрес функции , ьто просто  ставишь breakpoint  на начало вызова и на верхушке стека находишь адрес(это адрес от куда произошел вызов). Nными словами я не знаю как это объяснить. Ollydbg, CE, IDA в помощь

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Спасибо, за ответы, нашел.

 

8 минут назад, keng сказал:

Привет! Смотри выше по коду, что происходит с EBX. Значение адреса функции не берется из воздуха.

 

А выше только пролог был.

 

Я совершенно забыл про стек с этим статическим анализом. Второй месяц пытаюсь найти рисующую функцию в Dishonored, проверил функцию и восстановил еще десяток включающих в себя функций, возможно выше будет код установки цвета отрисовки моделек при темном зрении.

Изменено пользователем partoftheworlD
Ссылка на комментарий
Поделиться на другие сайты

По-моему, большинство компиляторов стараются передавать аргументы через стек, тк это банально удобнее, а регистры можно и более эффективно использовать. А пролог и эпилог, к слову, можно отладчик научить игнорировать и не показывать.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, keng сказал:

По-моему, большинство компиляторов стараются передавать аргументы через стек, тк это банально удобнее, а регистры можно и более эффективно использовать. А пролог и эпилог, к слову, можно отладчик научить игнорировать и не показывать.

речь идет о вызове функции через регистр, а не передачи аргументов.

происходит обращение к таблице виртуальных методов объекта, затем в регистр запихивается необходимая функция
...
mov eax,[ecx]
mov eax,[eax+0x0C] //4ая функция
call eax

Ссылка на комментарий
Поделиться на другие сайты

2 hours ago, Dino said:

речь идет о вызове функции через регистр, а не передачи аргументов.

происходит обращение к таблице виртуальных методов объекта, затем в регистр запихивается необходимая функция
...
mov eax,[ecx]
mov eax,[eax+0x0C] //4ая функция
call eax

Да я понял, я говорил о том, что обычно выше по коду параметры пихаются через стек, а не регистры. Частенько VMT вообще компилирует в длинную простыню jmp-ов.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.