gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:03:11 25 4
gpt4 key购买 nike

我正在学习如何使用函数 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 找到给定程序的对象映射位置。

关于c - 如何在 Linux C 中从库和地址中获取函数名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33371234/

25 4 0
文章推荐: javascript - 通过 内的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com