2.6 実行可能な ELF イメージ内のシンボルの場所を fromelf を使用して調べる方法

実行可能な ELF イメージ内のシンボルの場所を調べることができます。

ELF イメージファイル内のシンボルの場所を調べるには、--text -s -v オプションを使用して、各セグメントとセクションヘッダのシンボルテーブルおよび詳細情報を表示します。以下に例を示します。
シンボルテーブルを見ると、シンボルが配置されているセクションを確認できます。
以下の手順に従います。

手順

  1. 以下のソースコードを含む s.c という名前のファイルを作成します。
    long long altstack[10] __attribute__ ((section ("STACK"), zero_init));
    int main()
    {
        return sizeof(altstack);
    }
  2. ソースをコンパイルします。
    armclang --target=arm-arm-none-eabi -c s.c -o s.o
  3. オブジェクト s.o をリンクします。STACK シンボルは残して下さい。
    armlink --cpu=8-A.32 --keep=s.o(STACK) s.o --output=s.axf
  4. fromelf コマンドを実行して、各セグメントおよびセクションヘッダのシンボルテーブルと詳細情報を表示します。
    fromelf --text -s -v s.o
  5. 以下のような fromelf の出力結果から、STACK シンボルと altstack シンボルを探します。
              ...
              ** Section #9
              Name        : .symtab
              Type        : SHT_SYMTAB (0x00000002)
              Flags       : None (0x00000000)
              Addr        : 0x00000000
              File Offset : 776 (0x308)
              Size        : 2816 bytes (0xb00)
              Link        : Section 5 (.strtab)
              Info        : Last local symbol no = 111
              Alignment   : 4
              Entry Size  : 16
              
              Symbol table .symtab (175 symbols, 111 local)
              
                #  Symbol Name                Value      Bind  Sec  Type  Vis  Size
              =========================================================================
              ...
               13  STACK                      0x00008200   Lc    2  Sect  De   0x50
              ...
              174  altstack                   0x00008200   Gb    2  Data  Hi   0x50
              ...
    スタックが配置されているセクションが、Sec 列に表示されています。この例では、セクション 2 です。
  6. 確認したシンボルのセクションを fromelf の出力結果から探します。以下に例を示します。
              ...
              ====================================
              ** Section #2
              Name        : ER_ZI
              Type        : SHT_NOBITS (0x00000008)
              Flags       : SHF_ALLOC + SHF_WRITE (0x00000003)
              Addr        : 0x0000819c
              File Offset : 464 (0x1dc)
              Size        : 180 bytes (0xb4)
              Link        : SHN_UNDEF
              Info        : 0
              Alignment   : 8
              Entry Size  : 0
              ====================================
              ...
    以上の結果から、シンボルは ZI 実行領域に存在することがわかります。
関連する参考文書
3.59 --text
非機密扱いPDF file icon PDF 版ARM DUI0805CJ
Copyright © 2014, 2015 ARM.All rights reserved.