gdb是如何判定finish指令如何执行到"函数末尾"的?

zdferex 2016-10-09 05:53:29
是否是去检查有没有类似于leave这样的指令,或者mov %rbp, %rsp,pop %rbp这样的指令?
它怎么决定执行到哪一个字节的指令位置,就是finish了某个函数调用?

但是,光检查leave/mov ebp这样的指令恐怕还不行,因为函数调用之后,通常还会有一些寄存器需要pop回去。
而到底哪些寄存器需要被push和pop,是在编译阶段决定的,二进制文件里面已经没有这类信息了吧,gdb如何能判断哪里结束呢?
...全文
236 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-10-10
  • 打赏
  • 举报
回复
谁通过sp或esp或rsp读栈中的函数返回地址,谁就企图返回当前函数。
mLee79 2016-10-09
  • 打赏
  • 举报
回复
到ret啊, 很多函数都会省略栈帧, 没有 leave/pop bp 指令...

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧