【问题标题】:PIC (Position Independedent Code)PIC(位置无关码)
【发布时间】:2011-08-19 05:14:47
【问题描述】:

有什么方法可以检查目标文件(.o 文件)是否支持 PIC?

【问题讨论】:

    标签: c gcc compiler-construction linker fpic


    【解决方案1】:

    不确定它的可移植性如何,但对于 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,但我现在找不到参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 2013-01-27
      相关资源
      最近更新 更多