为什么`strip`不从ELF可执行文件中删除节标题?


9

最小的ELF可执行文件仅需要ELF标头和至少一个程序标头才能起作用。但是,当我在一个简短的可执行文件上运行strip时,它决定不扔掉节头表或节字符串节,尽管它们对程序执行没有任何作用(据我所知),但仍保留它们。

有没有理由不将它们删除?是否有另一个实用程序可以删除可执行文件运行所不需要的所有内容?我尝试手动编辑要删除的节标题的代码跟踪可执行文件,它看起来可以正常工作,并且要小得多。


它不是可能剥离,因为它可能会破坏某些程序/运行时间

Answers:


3

GNU binutilsstrip 的文档暗示了原因,但没有明确说明,在说明中--only-keep-debug提到

注意-保留剥离部分的节标题,包括其大小,但节的内容将被丢弃。保留节标题,以便其他工具可以将debuginfo文件与实际的可执行文件进行匹配,即使该可执行文件已重定位到其他地址空间也是如此。

也就是说,除非通过该-R选项明确告知,否则strip将保留节头,以帮助其他程序(包括gdb)完成其工作。

正确使用strip命令页面(使用Linux操作系统反向工程的一部分)说明

strip在可执行文件上运行命令是最常见的程序保护方法。在其默认操作中,该strip命令从可执行文件中删除符号表和所有调试信息。这就是通常的用法。但是,仍有有用的信息不会被删除。

并列举了一些可能遗留的有用信息,用于分析“剥离的”可执行文件。

在“ 学习Linux二进制分析”中,重申了这一点,并指出通常只有在有人故意删除节标题时才丢失节标题,gdb而没有节标题objdump则几乎没有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.