之前的函数调用堆栈返回地址:哪个段点的返回地址?

问题描述 投票:1回答:1

目前我正在学习的缓冲区溢出攻击。据我所知,这个想法是要覆盖返回地址。

返回地址指向下面的函数调用语句。我很纳闷:这是否指针指向程序的文本段?或者它指向堆或其他什么东西?

非常感谢你的帮助!

c return buffer-overflow exploit
1个回答
0
投票

既然你指的是在栈上返回地址,我会认为你对无处不在x86_64的。你可以通过它的等效callpush和标签更换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是默认的基址上的微软Windows PE格式的可执行文件,并为我的这个特殊的可执行文件,它说,.text(即代码)部分[esp]时运行从00401000到0040100D,所以是的,寄信人地址myfn被称为确实.text段内的点。

你在哪里别的认为它可能指向?返回地址必须是指令的地址call指令,其中,像所有其他代码,云在.text段之后。