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

时间:2019-02-07 18:23:57

标签: c return buffer-overflow exploit

我目前正在学习缓冲区溢出攻击。 我了解这个想法是要覆盖寄信人地址。

返回地址指向函数调用后的语句。我想知道的是:此指针是否指向程序的文本段?还是指向堆或其他东西?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

由于您是指堆栈上的返回地址,因此我假设您使用的是无处不在的x86_64。您可以自己检查一下,方法是将call替换为等效的pushjmp和标签(假设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段中。