【发布时间】:2011-08-19 05:14:47
【问题描述】:
有什么方法可以检查目标文件(.o 文件)是否支持 PIC?
【问题讨论】:
标签: c gcc compiler-construction linker fpic
有什么方法可以检查目标文件(.o 文件)是否支持 PIC?
【问题讨论】:
标签: c gcc compiler-construction linker fpic
不确定它的可移植性如何,但对于 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 .os,不应存在这样的部分部分。 (您还将在readelf -s 输出中看到一个全局偏移量表。)
对于 64 位,同样的事情,但使用 R_X86_64_GOTPCREL 重定位类型。我很确定所有重定位类型名称都直接指示代码是否为 PIC,但我现在找不到参考。
【讨论】: