首页 文章

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

提问于
浏览
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或任何其他util binutils(我的操作系统是Linux)?

1 回答

  • 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条目 .

相关问题