Loading article…
グローバルオフセットテーブル(GOT )は、コンピュータプログラム(実行可能ファイルと共有ライブラリ)のメモリの一部であり、実行時にプログラムのコードまたはデータがロードされるメモリアドレスに関係なく、 ELFファイルとしてコンパイルされたコンピュータプログラムコードを正しく実行できるようにするために使用されます。[1]
プログラミングコード内のシンボルを対応する絶対メモリアドレスにマッピングすることで、プログラムが起動するたびに異なるメモリアドレスにロードされる[3]位置独立コード(PIC)と位置独立実行可能ファイル(PIE)[2]を容易にします。変数と関数の絶対メモリアドレスとも呼ばれるランタイムメモリアドレスは、PICまたはPIEコードが実行されるプログラムが起動する前は不明であるため[4] 、コンパイラによるコンパイル時にハードコードすることはできません。
グローバル オフセット テーブルは、ELF ファイル[5]の .got セクションと .got.plt セクションとして表され、起動時にプログラムのメモリにロードされます。[5] [6]オペレーティング システムの動的リンカーは、プログラムの起動時またはシンボルがアクセスされたときに、グローバル オフセット テーブルの再配置(シンボルから絶対メモリ アドレス) を更新します。 [7] これは、共有ライブラリ(.so) を起動時に別のメモリ アドレスに再配置し、メイン プログラムや他の共有ライブラリとのメモリ アドレスの競合を回避し、コンピュータ プログラム コードを悪用から保護するためのメカニズムです。[8]
参考文献
- ^ 「ダイナミックリンク」refspecs.linuxfoundation.org。
- ^ 「コード生成オプション(GNU コンパイラ コレクションの使用)」gcc.gnu.org。
- ^ 「プログラムの実行方法: ELF バイナリ [LWN.net]」。lwn.net。
- ^ 「グローバル オフセット テーブル」。bottomupcs.sourceforge.net。
- ^ ab 「実行可能およびリンク可能フォーマット (ELF)」。stevens.netmeister.org。
- ^ Wienand, Ian (2011 年 5 月 10 日). 「PLT と GOT - コード共有と動的ライブラリの鍵」. Technovelty . 2020 年4 月 14 日閲覧。
- ^ アイヒンガー、クリスチャン。「ELF フォーマット - 内部から見たプログラムの様子」クリスチャン アイヒンガーの考え。
- ^ Sidhpurwala、Huzaifa (2018 年 1 月 28 日)。「Relocation Read-Only (RELRO) を使用して ELF バイナリを強化する」。Red Hat。
