共享库的外部符号使用计数

时间:2013-08-11 07:23:31

标签: linux shared-libraries binutils nm

我想找到一些外部符号,由另一个共享库(.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或任何其他util binutils(我的操作系统是Linux)?

1 个答案:

答案 0 :(得分:0)

你可以在每个符号上使用objdumpgrep,它应该给你一个符号被引用的次数,这里我从两个不同的函数中调用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条目。