首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux上,如何从Spack指针(reg/SP)中获取函数名?

在Linux上,如何从Spack指针(reg/SP)中获取函数名?
EN

Stack Overflow用户
提问于 2010-04-15 23:59:02
回答 2查看 1.2K关注 0票数 1

我正在使用ptrace获取与Linux上的Callstack相关的信息。我可以使用ptarces返回的寄存器来检索指向堆栈的Spack指针。但是使用这个堆栈指针,我如何检索与当前调用堆栈的函数名称和签名相关的信息?

有没有Linux API可以遍历这个callstack?

请帮帮我..我在找过去几天的……

提前感谢桑迪普

EN

回答 2

Stack Overflow用户

发布于 2010-04-16 08:53:17

您需要获取的第一件事是代码地址列表-当前正在执行的函数的地址列表,以及沿调用链返回的返回地址。

在x86上,%eip寄存器将在当前执行的函数的代码中包含一个内存地址。%ebp寄存器将指向堆栈上存储%ebp的前一个值的位置,后跟返回值。您需要遵循该%ebp值链,在执行过程中记录返回地址。

然后,您需要读取正在调试的二进制文件中的DWARF调试信息,以将代码地址解析回函数名。

请注意,只有在使用帧指针编译代码时,才能可靠地执行回溯。

票数 0
EN

Stack Overflow用户

发布于 2010-04-16 22:24:12

在这种情况下,我强烈建议使用libunwind。它为调用栈的遍历提供了一个很好的API。这取决于对象中是否存在.eh_frame头file.It可以在本地和远程(您的用例)上下文中使用。堆栈展开不依赖于DWARF信息或调试版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2646921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档