有什么方法可以检查目标文件(.o 文件)是否启用了 PIC?
最佳答案
不确定这有多便携,但对于 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,但我现在找不到引用。
关于c - PIC(位置无关代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5895388/