IBM的AIX strip实用程序文档指出以下内容:不带选项的strip命令将删除行号信息,
重定位信息,符号表,调试节和
typchk部分和comment部分。

评论

好吧,那很奇怪。如果没有重定位信息,则二进制文件要么必须是位置无关的代码,要么不能被ASLR化。我期待着答案。

但是,这并非完全是反向工程问题。

#1 楼

COFF文件不旨在在链接时间后支持重定位:


Linux最初使用的二进制格式是a.out
变体。引入共享库时,必须做出某些设计决定,以使其不受a.out的限制。公认的主要限制是在加载时和加载后均不执行重定位。
共享库必须以它们在磁盘上运行时使用的形式存在。这对共享库的构建和使用方式施加了主要限制:每个
共享库必须具有固定的加载地址;否则,
将无法生成不必重新定位的共享库。1


XCOFF表示支持使用的COFF扩展共享库中,由strip删除的重定位信息与链接时重定位而不是加载时或运行时重定位有关的信息有关:扩展公共目标文件格式(XCOFF)目标文件,它通过删除绑定程序和符号调试程序使用的信息来实现。链接XCOFF对象文件以创建XCOFF可执行文件。2


活页夹的作用似乎与Linux系统上的链接编辑器ld相似。

请参见-x标志的说明:


删除符号表信息,但不删除静态或外部符号信息。 -x标志还会删除重定位信息,因此无法链接到文件。





如何编写共享库
重定位信息XCOFF文件(reloc.h)的文件


#2 楼

显然XCOFF格式为动态链接程序(系统加载器)提供了一个单独的部分:加载并重定位可执行的XCOFF对象。加载程序部分由活页夹生成。装入程序部分在XCOFF节头中具有STYP_LOADER的s_flags节类型标志。按照约定,
.loader是加载程序节的名称。 XCOFF符号表中的条目未引用本节中的数据。

strip不能删除此数据,因此该文件仍然有效。关于剥离的ELF文件会发生什么问题。