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. ソースをコンパイルします。

    -c s.c -o s.o

  3. オブジェクト s.o をリンクし、STACK シンボルは残します。

    armlink --keep=s.o(STACK) s.o --output=s.axf

  4. fromelf コマンドを実行して、各セグメントおよびセクションヘッダのシンボルテーブルと詳細情報を表示します。

    fromelf --text -s -v s.o

  5. STACK シンボルと altstack シンボルを fromelf の出力結果で探します。以下に例を示します。

    ...** Section #9     Name        :.symtab     Type        :SHT_SYMTAB (0x00000002)     Flags       :None (0x00000000)     Addr        :0x00000000     File Offset :2792 (0xae8)     Size        :2896 bytes (0xb50)     Link        :Section 10 (.strtab)     Info        :Last local symbol no = 115     Alignment   :4     Entry Size  :16    Symbol table .symtab (180 symbols, 115 local)       #  Symbol Name                Value      Bind  Sec  Type  Vis  Size ========================================================================= ...16  STACK                      0x00008228   Lc    2  Sect  De   0x50 ...179  altstack                   0x00008228   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        :0x000081c8     File Offset :508 (0x1fc)     Size        :176 bytes (0xb0)     Link        :SHN_UNDEF     Info        :0     Alignment   :8     Entry Size  :0 ==================================== ...
    

    以上の結果から、シンボルは ZI 実行領域に存在することがわかります。

関連する参考文書
3.62 --text
非機密扱いPDF file icon PDF 版ARM DUI0477JJ
Copyright © 2010-2013 ARM.All rights reserved.