2つのファイルを使用すると、1つはコンパイルされリンクされ、もうgcc
1つは手動で使用されますnasm
。ld
- 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のこの提出を通じて。ここではもう少し活用してさらに説明します。