linux – 为什么剥离的二进制文件仍然可以在反汇编文件中拥有库调用信息?

测试平台是32位Linux.

我编译了一个没有条带信息的c程序,并使用objdump来
反汇编elf可执行文件.

这是结果的一部分.

804831c:  e8 8c fe ff ff     call 8048360 <printf@plt>

如果我使用:

strip binary 

要删除符号信息并使用objdump再次反汇编elf可执行文件,我仍然可以看到如下结果:

804831c:  e8 8c fe ff ff     call 8048360 <printf@plt>

所以我的问题是:

在我删除了所有符号信息之后,像objdump这样的反汇编工具如何知道某些库函数的名称?

谢谢!

解决方法:

ELF文件有2个符号表:.symtab和.dynsym.后者用于动态链接(重定位)所需的动态符号.
在你的情况下,printf在.dynsym中,它也可能出现在.symtab中;默认情况下,strip会删除.symtab,但不会删除重定位所需的.dynsym.

你可以试试

strip -R .dynsym your_binary

手动删除dynsym部分,你会发现由于重新分配失败而无法运行.

上一篇:2020美团秋招笔试记录


下一篇:python中的strip()方法