Поскольку вы имеете в виду адреса возврата в стеке, я предполагаю, что вы используете вездесущий x86_64.Вы можете проверить это самостоятельно, заменив инструкцию call
ее эквивалентными push
, jmp
и меткой (при условии, что myfn
является листовой подпрограммой):
push offset RA1
jmp _myfn
RA1:
; Remainder of instructions in the calling code...
Когда я на самом деле собираю этоЯ получаю следующий код:
00401004: 68 0B 10 40 00 push 40100Bh ; RA1
00401009: EB F5 jmp 00401000 ; myfn
0040100B: 33 C0 xor eax,eax ; next instruction
Теперь 00400000 является базовым адресом по умолчанию для исполняемых файлов в формате MS Windows PE, и для этого конкретного исполняемого файла, он говорит, что .text
(т.е. код) раздел работает с 00401000 по 0040100D, так что да, адрес возврата в [esp]
, когда myfn
действительно вызывается, указывает в пределах сегмента .text
.
Куда еще, по вашему мнению, он может указывать?Обратный адрес должен быть по адресу инструкции сразу после инструкции call
, которая, как и весь другой код, идет в сегменте .text
.