gdb是怎么样判定finish指令怎么样执行到"函数末尾"的

C++语言 码拜 4年前 (2017-04-25) 628次浏览
能否是去检查有没有相似于leave这样的指令,或mov %rbp, %rsp,pop %rbp这样的指令?
它怎么决定执行到哪一个字节的指令位置,就是finish了某个函数调用?
但是,光检查leave/mov ebp这样的指令恐怕还不行,原因是函数调用之后,通常还会有一些寄存器需要pop回去。
而到底哪些寄存器需要被push和pop,是在编译阶段决定的,二进制文件里面已经没有这类信息了吧,gdb怎么样能判断哪里结束呢?
解决方案

20

到ret啊, 很多函数都会省略栈帧, 没有 leave/pop bp 指令…

20

谁通过sp或esp或rsp读栈中的函数返回地址,谁就企图返回当前函数。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明gdb是怎么样判定finish指令怎么样执行到"函数末尾"的
喜欢 (0)
[1034331897@qq.com]
分享 (0)