0

我想找到一些外部符号,由另一个共享库(.so)使用。我可以轻松跑

 nm -D ./lib_the_one.so

并通过 grepping 获取使用的符号列表,例如“U”(未定义的符号):

          U The_external_symbol

现在我想知道,在整个库“lib_the_one.so”中(静态)存在多少个符号的用法。更确切地说,

  • 一些外部函数有多少直接调用
  • 外部变量被引用多少次

例如,我想知道我的“lib_the_one.so”中有 10 个函数,其中调用了对calloc它们的调用,还有 5 个函数调用了malloc.

如何使用 nm、objdump 或任何其他实用程序 binutils(我的操作系统是 Linux)来做到这一点?

4

1 回答 1

0

您可以在每个符号上使用objdumpand grep,它应该为您提供符号被引用的次数,这里我malloc从两个不同的函数中调用了两次:

objdump  -D test_prog | grep malloc
0000000000400928 <malloc@plt>:
400b91: e8 92 fd ff ff          callq  400928 <malloc@plt>
400c9c: e8 87 fc ff ff          callq  400928 <malloc@plt>

注意:忽略第一个它是 plt 条目。

于 2013-08-11T09:03:43.350 回答