У меня есть следующий код:
Func5() { ShowStackTrace();}
Func4() { Func5();}
Вот трассировка стека, которую я имею -
**Frame for Func5**
EIP : 403899
Function name : Func5
EBP : 12ff0c
ESP : 12fed0
Return address : 4038c8
CS : 23
DS : 9998
ESI : 0
EDI : 0
**Frame for Func4**
Function name : Func4
EBP : 12ff14
ESP : 12ff14
CS : 23
DS : 9998
ESI : 0
EDI : 0
Теперь, используя адрес возврата Func5, я получил первые 5 байтов над ним
ff ff ff 88 E8
Наличие E8 здесь означает, что это оператор вызова (рядом), и следующие 4 байта должны использоваться для вычисления адреса.Таким образом, EIP, когда мы будем читать CALL Func5, будет 4038c3.Как рассчитать начальный адрес Func5 по этим данным?Пожалуйста, скажите, если вам нужны какие-либо другие данные.Кроме того, как выполняется вычисление, если это дальний вызов (код операции - FF)?