共有オブジェクトファイルと再配置可能ファイルの違いは何ですか?

共有オブジェクトファイルと再配置可能ファイルの違いは何ですか?

https://linux-audit.com/elf-binaries-on-linux-understanding-and-analytic/ 説明する

タイプフィールドは、ファイルがどの用途に使用されるかを示します。いくつかの一般的なファイル形式があります。

CORE (value 4)
DYN (Shared object file), for libraries (value 3)
EXEC (Executable file), for binaries (value 2)
REL (Relocatable file), before linked into an executable file (value 1)

https://unix.stackexchange.com/a/476157/674カーネルモジュールがRELであることを示します。なぜDYNの代わりにRELを使用するのですか?

DYNとRELの違いは何ですか?

ありがとうございます。

ベストアンサー1

バラよりシステムV ABI、ELF形式の仕様が含まれています。それは言う

さまざまなターゲットファイルの再配置エントリは、メンバーを少し異なるように解釈しますr_offset

  • 再配置可能ファイルはr_offsetセクションオフセットを保存します。つまり、再配置セクション自体は、ファイルの他のセクションを変更する方法を説明します。再配置オフセットは、2番目のセクション内の保存場所を指定します。

  • 実行ファイルと共有オブジェクトにr_offset仮想アドレスを保存します。これらのファイルの再配置エントリを動的リンカーにさらに便利にするために、セクションオフセット(ファイルの解釈)は仮想アドレス(メモリの解釈)に置き換えられます。

再配置可能ファイルはまだ完全に再配置可能ですが、共有オブジェクトは接続プロセスを続行し、ほとんど再配置されました。共有オブジェクトは、そのコードが位置に依存しない場合にのみ再配置可能です(例えばGCCのオプションとして-fPIC構築されました)。

カーネルモジュールは位置に依存せず、再配置可能である必要があるため、再配置可能なファイルとして提供されます。

おすすめ記事