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

时间:2015-10-27 14:54:09

标签: c linux dlopen

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

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果您知道与对象空间相关的地址,则可以使用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找到给定程序的对象映射位置。