静的にリンクされた実行可能ファイルにグローバルオフセットテーブルとプロシージャリンクテーブルがあるのはなぜですか?

マイク・スウィーニー:

動的リンカの再配置と、プロシージャのリンクテーブルやグローバルオフセットテーブルを含む位置に依存しないコードについて、たくさん読んだ。静的にリンクされた実行可能ファイルにPLTとGOTが必要な理由がわかりません。私はubuntu x86_64マシンでhello worldプログラムをコンパイルしました。セクションヘッダーをダンプすると、readelf -SPLTセクションとGOTセクションが表示されます。

また、コンパイルせgcc -sharedにコンパイルした単純なインクリメント関数を使用して共有ライブラリを作成しました-fpic。PLTセクションとGOTセクションも表示されます。私もこれを期待していませんでした。

雇用されたロシア人:

静的にリンクされた実行可能ファイルにPLTとGOTが必要な理由がわかりません。

そうではありません。

ubuntu x86_64マシンでhello worldプログラムをコンパイルしました。readelf-Sでセクションヘッダーをダンプすると、PLTセクションとGOTセクションが表示されます。

これは実装の事故です。セクションから来crt1.oて、独立した存在ではありませんcrt1s.oあなたがで終わるので、完全に静的リンク用.pltおよび.gotそこからのエントリ。

これらのセクションを削除しても、バイナリは引き続き機能します。

objcopy -R.got -R.plt a.out a.out2

注:は.rela.plt実装しないでください。そのセクションはを実装するために必要ですIFUNC

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ