0

我有一个我正在尝试调试的应用程序,但是在 gdb 下运行它会产生不同的结果,并且在遇到地址时让它输出真实的符号信息会很好。例如。

我有一个定期调用的方法,我可以确定调用站点的地址。但是,我想在运行时为该地址打印出符号信息。我知道我可以在可执行文件上运行“nm”,但这在应用程序之外。我希望能够从应用程序本身中做到这一点。

我在 linux 平台上使用 GCC 4.7.2。

(编辑解释为什么我不能使用 gdb)

4

1 回答 1

1

动态符号信息可以通过DT_DYNAMIC段访问,该段加载到内存中,可以通过请求dlopen(3)主可执行文件的句柄来访问。

静态符号信息只能从实际的可执行文件或外部文件中读取,因为它未列在可加载段中。

仅使用动态信息,您将无法解析未导出的任何内容,这意味着您很可能只会看到库调用,除非您的可执行文件已导出其符号表,因此静态信息可能是要走的路。

这涉及大量解析,或者使用从binutilsbfd构建的库。

不过,我真的想知道这是否真的值得付出努力。您可能会通过使用 gcc 中的分析支持获得相同的信息。

于 2013-10-31T14:38:49.673 回答