2010-07-08 73 views
1

我正在使用第三方共享库,我需要检查一个函数是否以编程方式导出共享库。如何在程序中检查共享库暴露函数

如何做到这一点。我需要这个,因为如果函数不存在,我需要在本地运行一些其他函数。

+2

尝试'纳米-C -D |如果您使用shell脚本,则使用grep -F'T';在C/C++中使用'dlopen','dlsym'和'dlclose'函数。否则,请至少指定您正在使用的编程语言。 – Philipp 2010-07-08 09:18:09

回答

2

您可以使用dlsym

如果使用dlopen加载库,您将使用它返回的句柄。

如果你对这个库链接你可以使用特殊的伪句柄(10倍到CAF指点出来):

从对dlsym人:

有两个特殊的伪 - 手柄,RTLD_DEFAULT和RTLD_NEXT。前者将使用默认库搜索顺序查找所需符号的第一个匹配项。后者将在当前库之后的搜索顺序中查找下一个函数。这使得人们可以在另一个共享库中的函数中提供一个包装。

+1

在Linux上,您不需要用'dlopen()'打开它 - 如果目标库与主程序链接,则可以将伪句柄RTLD_DEFAULT传递给dlsym()。 – caf 2010-07-08 11:31:23

+0

这是一个很好的说明,谢谢。我会编辑我的答案 – 2010-07-08 14:12:33

+0

这解决了我的问题,谢谢 – Poorna 2010-07-09 05:12:24

0

检查目标库的头文件以获取函数签名。 使用dlopen您可以动态加载库,并在符号库中显示并随后调用dlsym和dlclose时获取该符号。

0

可能是你可以使用objdump的命令检查暴露这样 objdump的-T所有符号libtest.so