8

オブジェクト ファイル (.o ファイル) が PIC 対応かどうかを確認する方法はありますか?

4

1 に答える 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の場合、そのようなセクション section は存在しないはずです。(出力には、グローバル オフセット テーブルも表示されreadelf -sます。)

64ビットの場合、同じことですが、R_X86_64_GOTPCREL再配置タイプがあります。すべての再配置型の名前は、コードが PIC であるかどうかを直接示していると確信していますが、現在、参照を見つけることができません。

于 2011-05-05T11:29:51.077 に答える