图书馆中的功能符号

时间:2015-05-20 07:49:46

标签: shared-libraries reverse-engineering symbols

我知道这些命令:

readelf -sW alloc.o | awk '$4 == "FUNC"'

nm alloc.o | awk '$2=="T" || $2=="t"'

我可以获得库中使用的函数名称。

但是,如何区分库中 USED 的功能,以及库中 DEFINED 的功能?

是否有另一种方法来获取库定义的函数?

非常感谢!

1 个答案:

答案 0 :(得分:0)

  

我知道这些命令:...我可以获得库中使用的函数的名称。

不,你不能。命令提供的是目标文件(或库)中定义的函数列表。

  

是否有其他方法可以通过库

获取函数DEFINED

为什么你需要另一种方式?

  

如何区分库使用的函数以及库定义的函数

这取决于你的意思"由图书馆使用"。典型的库将使用它自己的一些功能,而一些功能则来自外部。例如,包含foo.obar.o的{​​{1}}调用foo()以及bar()以外的bar()调用的库将如下所示:

baz()

您可以在此处看到 readelf -Ws libfoobar.a | egrep 'foo|bar|baz' | grep -v ' ABS' File: libfoobar.a(foo.o) 8: 0000000000000000 16 FUNC GLOBAL DEFAULT 1 foo 9: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND bar File: libfoobar.a(bar.o) 8: 0000000000000000 16 FUNC GLOBAL DEFAULT 1 bar 9: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND baz 定义foo.o,并使用foo; bar定义bar.o并使用bar(此库中未定义)。

您可以看到的是,库是否使用了baz(例如foo是否递归)。