【问题标题】:Effects of removing all symbol table and relocation information from an executable?从可执行文件中删除所有符号表和重定位信息的影响?
【发布时间】:2012-12-19 22:45:12
【问题描述】:

使用 gcc -s 和 Unix strip 编译从可执行文件中删除所有符号表和重定位信息(使其更小)。

这会影响可执行文件的功能吗?某些执行地址空间布局随机化 (ASLR) 的操作系统是否需要此信息?如果不是,为什么一开始就保留它们?

详细概述上述内容会有所帮助。

【问题讨论】:

  • 我不确定任何现代strip 会删除重定位信息。你不这么认为吗?
  • @NPE gcc -s <object>gcc <object> + strip 产生了完全相同大小的可执行文件,所以我假设他们也在做同样的事情。但你是对的,它不会删除重定位信息。
  • this question。 fPIE(和 fPIC)代码不需要对其位置进行硬编码,因此不需要任何重定位信息。

标签: linux gcc assembly executable


【解决方案1】:

很明显,删除重定位信息会干扰 ASLR。

但是,我在我的几个系统上查看了man strip,没有一个建议strip 确实(或者确实可以?)删除重定位信息。主要是去掉调试符号。

【讨论】:

  • 你就在那里。另一方面,gcc -s 不会将重定位信息添加到二进制文件中。重定位表一定很重要吧?考虑到 ELF 在加载时使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多