测试平台是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部分,你会发现由于重新分配失败而无法运行.