能否是去检查有没有相似于leave这样的指令,或mov %rbp, %rsp,pop %rbp这样的指令?
它怎么决定执行到哪一个字节的指令位置,就是finish了某个函数调用?
但是,光检查leave/mov ebp这样的指令恐怕还不行,原因是函数调用之后,通常还会有一些寄存器需要pop回去。
而到底哪些寄存器需要被push和pop,是在编译阶段决定的,二进制文件里面已经没有这类信息了吧,gdb怎么样能判断哪里结束呢?
它怎么决定执行到哪一个字节的指令位置,就是finish了某个函数调用?
但是,光检查leave/mov ebp这样的指令恐怕还不行,原因是函数调用之后,通常还会有一些寄存器需要pop回去。
而到底哪些寄存器需要被push和pop,是在编译阶段决定的,二进制文件里面已经没有这类信息了吧,gdb怎么样能判断哪里结束呢?
解决方案
20
到ret啊, 很多函数都会省略栈帧, 没有 leave/pop bp 指令…
20
谁通过sp或esp或rsp读栈中的函数返回地址,谁就企图返回当前函数。