PIC(位置无关代码)

8

有没有办法检查一个目标文件(.o 文件)是否启用了 PIC?

1个回答

7

不确定这个方法有多通用,但对于x86和x86_64,ELF格式,您可以使用readelf -r命令并查看重定位类型。

对于32位PIC代码,您应该有一个R_386_GOTPC重定位节:

Relocation section '.rel.text' at offset 0x38c contains 3 entries:
 Offset     Info    Type            Sym.Value  Sym. Name
00000004  00000902 R_386_PC32        00000000   __i686.get_pc_thunk.cx
0000000a  00000a0a R_386_GOTPC       00000000   _GLOBAL_OFFSET_TABLE_
00000010  00000803 R_386_GOT32       00000000   f

非PIC的.o文件不应该存在任何这样的部分。在readelf -s输出中,您还会看到全局偏移表。

对于64位,同样的情况,但使用R_X86_64_GOTPCREL重定位类型。我相信所有重定位类型名称都直接指示代码是否为PIC,但我现在找不到参考资料。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接