我正在使用ptrace获取与Linux上的Callstack相关的信息。我可以使用ptarces返回的寄存器来检索指向堆栈的Spack指针。但是使用这个堆栈指针,我如何检索与当前调用堆栈的函数名称和签名相关的信息?
有没有Linux API可以遍历这个callstack?
请帮帮我..我在找过去几天的……
提前感谢桑迪普
发布于 2010-04-16 08:53:17
您需要获取的第一件事是代码地址列表-当前正在执行的函数的地址列表,以及沿调用链返回的返回地址。
在x86上,%eip寄存器将在当前执行的函数的代码中包含一个内存地址。%ebp寄存器将指向堆栈上存储%ebp的前一个值的位置,后跟返回值。您需要遵循该%ebp值链,在执行过程中记录返回地址。
然后,您需要读取正在调试的二进制文件中的DWARF调试信息,以将代码地址解析回函数名。
请注意,只有在使用帧指针编译代码时,才能可靠地执行回溯。
发布于 2010-04-16 22:24:12
在这种情况下,我强烈建议使用libunwind。它为调用栈的遍历提供了一个很好的API。这取决于对象中是否存在.eh_frame头file.It可以在本地和远程(您的用例)上下文中使用。堆栈展开不依赖于DWARF信息或调试版本。
https://stackoverflow.com/questions/2646921
复制相似问题