首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数调用前堆栈中的返回地址:返回地址指向哪个段?

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

Stack Overflow用户
提问于 2019-02-08 02:23:57
回答 1查看 352关注 0票数 1

我目前正在学习缓冲区溢出攻击。我知道这样做是为了重写寄信人的地址。

返回地址指向函数调用后的语句。我想知道的是:这个指针是否指向程序的文本段?或者它是否指向堆或其他什么?

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-08 02:34:10

由于您引用的是堆栈上的返回地址,因此我将假定您使用的是无处不在的x86_64。您可以通过将call指令替换为其等效的pushjmp和label (假设myfn是一个叶例程)来亲自检查这一点:

代码语言:javascript
运行
复制
push offset RA1
jmp _myfn
RA1:
; Remainder of instructions in the calling code...

当我实际组装这段代码时,我得到了以下代码:

代码语言:javascript
运行
复制
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,所以是的,当调用myfn时,[esp]中的返回地址确实指向.text段。

你觉得它还能指向哪里呢?返回地址必须是紧跟在call指令之后的指令地址,与所有其他代码一样,该指令位于.text段中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54579892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档