繁体   English   中英

如何在Linux C中从库和地址获取函数名称

[英]How to Get A Function Name From a Library and Address in Linux C

我正在学习如何使用dlopen,dlsym等函数来获取给定库中给定函数的地址,但是我该如何做相反呢? 例如,如果我知道我的进程当前在libgtk-x11-2.0.so.0中的gtk_main + 0xa7处,那么如何确定该函数是什么?

谢谢您的帮助!

如果知道与对象空间有关的地址,则可以使用nm 在我自己的libgtk-x11上……

# nm -D /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.23
000000000006da20 T gtk_about_dialog_get_artists
000000000006d800 T gtk_about_dialog_get_authors
000000000006d260 T gtk_about_dialog_get_comments
…

动态符号需要选项-D ,您应该只看一下“ T”符号(在对象内部“确实”)。 当然,这些地址与对象有关,而与程序中的空间无关。

请注意,您只会获得条目的起始地址,因此,如果函数获得地址,则必须计算最近的地址。 有关其他可用数据,请参见nm页。

您至少可以通过查看/ proc / PID / maps来找到给定程序的对象映射位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM