Linux调用栈获取分析及实现(2)

 ---------   | ret_addr|   |---------|    |   ebp   |     |---------|            我们再看一下第二条指令,mov %esp , %ebp , 初始化当前函数栈帧。最终结果如下    ---------   | ret_addr|   |   |---------|   |   |    ebp  |---/      |---------|<--|   |   ...   |   |   |---------|   |   | ret_addr|   |   |---------|   |   |  ebp    |---/   |---------|<--|    |  ...    |   |   |---------|   |         | ret_addr|   |   |---------|   |   |   ebp   |---/   |---------|---|   


所以我们只要知道当前%epb的值,就可以通过上面那种图示方法进行调用栈分析了。有人会问为什么libc有函数实现了,自己就没有必要了,但libc只提供获取当前线程的调用栈信息,有些时候需要获取其他线程的调用栈信息,这个时候就需要自己分析实现了,总体思路一样,只需要获取到其它线程的%ebp信息即可,但通常情况在用户态是不能够获取%ebp寄存器的,可以借助内存模块来实现。

下面写的一个小程序,一种方法使用libc库里面backtrace函数实现,还有一种就是自己通过分析调用栈信息来实现。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwgszw.html