それではELFフォーマットのELFヘッダを見ていきましょう。

以下のように定義されています。

 

#define        EINIDENT     16
typedef struct{
    unsigned char     e_ident[EINIDENT];
    Elf_32_Half     e_type;
    Elf_32_Half     e_machine;
    Elf_32_Word     e_version;
    Elf_32_Addr     e_entry;    
    Elf_32_Off        e_phoff;
    Elf_32_Off        e_shoff;
    Elf_32_Word     e_flags;
    Elf_32_Half     e_ehsize;
    Elf_32_Half     e_phentsize;
    Elf_32_Half     e_phnum;
    Elf_32_Half     e_shentsize;
    Elf_32_Half     e_shnum;
    Elf_32_Half     e_shstrndx;
} Elf32_Ehdr ;

1.e_identは、先頭にELFという文字列が入っています。
2.e_typeは、このファイルのタイプを示します。今回私は実行形式を対象にするので、2が入っている事となります。
    0 No file type
    1 Relocatable file
    2 Executable file
    3 Shared object file
    4 Core file
    0xff00 Processor-specific
    0xffff Processor-specific

3.e_machine 実行形式を動かすアーキテクチャを示します。
    この定義がどこにあるのかがわかっていないのですが、WikipediaのELFのフォーマットに結構掲載されていました。
    0x03  x86
    0x28  arm
    0x3E  x86-64
    0xF3  RISC-V
    

4.e_version  オブジェクトのファイルバージョンをしめします。
    いまのところELFフォーマット拡張されていないので、通常は1となるようです。
    

5. e_entry はこのプログラムのスタートアドレスを示します。
    無い場合はゼロとなるので、スタートアドレスがゼロというのは扱いにくいのかもしれませんね。
    
    
6.     e_phoffはプログラムヘッダテーブルをアクセスするためのオフセット値を提供
    プログラムヘッダにアクセスるためには必須です。
    

7. e_shoffはセクションヘッダテーブルをアクセスするためのオフセット値を提供
    セクションヘッダにアクセスするためには必須です。
    
8. e_flagsはプロセッサ依存のフラグ

9. e_ehsizeは、ELFヘッダのサイズ(Byte)

10. e_phentsize プログラムヘッダのサイズ(Byte)

11. e_phnum   プログラムヘッダの個数


12. e_shentsize  セクションヘッダのサイズ(Byte)

13. e_shnum  セクションヘッダの個数

14. e_shstrndx セクションヘッダの名前テーブルのインデックス

 

 

そこで、TANG NANO 9Kのサンプルfw-flash.elfファイルをobjdumpで見てみると・・・以下の情報が出ていました。

fw-flash.elf:     file format elf32-littleriscv
fw-flash.elf
architecture: riscv:rv32, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x00000000
 

これを実際のファイルから読み出すと、以下になっていました。

 ELF ID  [ELF]
   type       0x2
   machine    0xf3
   version    0x1
   entry      0x0
   phoff       0x34
   shoff       0x1645c
   flags       0x0
   ehsize      0x34
   phetsize    0x20
   phnum       0x2
   shetsize    0x28
   shnum       0x14