У меня есть следующий код в VC ++
Func5(){ StackWalk(); }
Func4{ Func5();}
Я новичок в ассемблере x86.Я пытаюсь узнать начальный адрес Func5 ().Я получаю адрес возврата Func5 () из его стекового фрейма.Теперь перед этим обратным адресом должен быть оператор CALL.Поэтому я извлекаю байты перед обратным адресом.
Иногда это ближайший вызов, например E8 ff ff ff d8
.Поэтому для этого оператора я вычитаю смещение 0x28 из адреса возврата функции, чтобы получить базовый адрес Func5 () (где он находится в памяти).
Проблема в том, что я не знаю, как рассчитать это длякосвенный вызов NEAR.Я пытался выяснить, как сделать это в течение некоторого времени.Итак, я извлек первые 5 байтов перед обратным адресом, и они равны ff 75 08 ff d2
Я думаю, что это означает CALL ECX (ff d2)
, но я не уверен.
Я буду очень признателен, если кто-то может сказать мнеэто как оператор CALL, и как я могу вычислить базовый адрес функции из этого вида вызова.