カーネル自体とカーネルモジュールにはどのタイプのELFがありますか?

カーネル自体とカーネルモジュールにはどのタイプのELFがありますか?

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)

...

一般的な誤解は、ELFファイルがバイナリまたは実行可能ファイルにのみ適用されることです。私たちは、部分的フラグメント(オブジェクトコード)に使用できることを確認しました。別の例は、共有ライブラリまたはコアダンプ(そのコアまたはa.outファイル)です。 ELF仕様は、カーネル自体やLinuxのLinuxカーネルモジュールでも使用されます。

カーネル自体とカーネルモジュールにはどのタイプのELFがありますか?

私が試してみるカーネル自体やカーネルモジュール用のファイルの例を挙げてくださいfile。 Ubuntu 18.04を使用しています。

ありがとうございます。

ベストアンサー1

自分で見つけることができます:

モジュールの場合は、以下を確認してください/lib/modules/$(uname -r)/kernel/.../*.ko

$ file xfs.ko 
xfs.ko: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), BuildID[sha1]=bcb5e287509cedbb0c5ece383e0b97fb99e4781e, not stripped

$ readelf -h xfs.ko 
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          1829088 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           64 (bytes)
  Number of section headers:         45
  Section header string table index: 44

カーネルの簡単な方法は、カーネルをコンパイルしてvmlinuxを見てみることです。

$ file vmlinux
vmlinux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=eaf006a7ccfedbc40a6feddb04088bdb2ef0112f, with debug_info, not stripped

$ readelf -h vmlinux
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x1000000
  Start of program headers:          64 (bytes into file)
  Start of section headers:          171602920 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         5
  Size of section headers:           64 (bytes)
  Number of section headers:         43
  Section header string table index: 42

おすすめ記事