1

假设我正在“取证”检查其他人编译的目标文件。我没有源代码,也不能依赖调试符号。不过,我可以使用:

objdump -C -t my_object.o \
| sed -r '/\\*UND\\*/!d; s/000+\s+\*UND\*\s+000+ //;' \
| sort

获取它使用的外部符号。

但是,如果我所追求的是每个符号的使用次数呢?有没有办法在不费力地解析反汇编代码的情况下做到这一点?

笔记:

  • 一个 GNU 系统(例如 Linux)
  • 假设安装了 C++ 软件开发中使用的基本工具。
4

1 回答 1

1

对于函数,您可以查看重定位的数量,例如:

// test.cc:
void foo();

int main() {
  foo();
  foo();
}
$ c++ -c test.cc
$ objdump -r test.o | grep foo
0000000000000005 R_X86_64_PC32     _Z3foov-0x0000000000000004
000000000000000a R_X86_64_PC32     _Z3foov-0x0000000000000004

这里我们有两个重定位,每个对应一个函数调用。

于 2021-03-05T15:21:15.713 回答