「LSB実行可能ファイル」(ET_EXEC)と「LSB共有オブジェクト」(ET_DYN)の違いは何ですか?

「LSB実行可能ファイル」(ET_EXEC)と「LSB共有オブジェクト」(ET_DYN)の違いは何ですか?

2つのファイルを使用すると、1つはコンパイルされリンクされ、もうgcc1つは手動で使用されますnasmld

  • ELF 32ビットLSB共有オブジェクト...
  • ELF 32ビットLSB実行可能ファイル...

これら2つの違いは何ですか?私が見るreadelf -hことができるもの

  • タイプ:DYN (Shared object file)
  • タイプ:EXEC (Executable file)

以下でこの履歴を見ることができます。ET_DYN次のためのウィキペディアET_EXEC。 2つの間の実質的な違いは何ですか?

ベストアンサー1

これは場所に依存しない実行可能ファイル(PIE)に関連しているようです。 GCCはデフォルトで実行可能ファイルをコンパイルするときにPIEにし、ELFヘッダの出力フラグをET_DYN

以下を使用して、PIE実行可能ファイルの作成を無効にできます。

  • gcc -no-pie

この内容が表示されたら、gcc設定のデフォルトオプションを確認すると、次のgcc -v内容が表示されます--enable-default-pie

以下からインスピレーションを受けた回答StackOverflowのこの提出を通じてここではもう少し活用してさらに説明します。

おすすめ記事