C 如何以编程方式在正在运行的应用程序中查找符号

C 如何以编程方式在正在运行的应用程序中查找符号,c,linux,gcc,C,Linux,Gcc,我有一个我正试图调试的应用程序,但是在gdb下运行它会产生不同的结果,当遇到地址时,让它输出真实的符号信息会更好。比如说 我有一个定期调用的方法,我可以确定调用站点的地址。但是,我想打印这个地址的运行时的符号信息。我知道我可以在可执行文件上运行“nm”,但这不在应用程序范围内。我希望能够从应用程序本身内部完成这项工作 我在linux平台上使用GCC4.7.2 (eddited解释为什么我不能使用gdb)动态符号信息可以通过dtu Dynamic段访问,该段加载到内存中,可以通过询问dlopen(

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

我有一个定期调用的方法,我可以确定调用站点的地址。但是,我想打印这个地址的运行时的符号信息。我知道我可以在可执行文件上运行“nm”,但这不在应用程序范围内。我希望能够从应用程序本身内部完成这项工作

我在linux平台上使用GCC4.7.2


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

动态符号信息可以通过
dtu Dynamic
段访问,该段加载到内存中,可以通过询问
dlopen(3)
获取主可执行文件的句柄来访问

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

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

这涉及到大量的解析,或者使用从binutils构建的
bfd


不过,我很想知道这是否真的值得。使用gcc中的评测支持可能会得到相同的信息。

为什么不通过调试器运行应用程序,例如
gdb
?我不想调试它。我想打印出调用方法中的符号名称是这些方法还是这是C?
\uu PRETTY\u FUNCTION\uuu
是否提供了您所需的内容?问题是:“我有一个正在调试的应用程序”。在评论中:“我不想调试它。”当你知道你想要什么时,请回来。