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

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

fromelf --text -s -v s.axf

シンボルテーブルを見ると、シンボルが配置されているセクションを確認できます。

Show/hide

以下の手順に従います。

  1. 以下のソースコードを含む s.c という名前のファイルを作成します。

    long long altstack[10] __attribute__ ((section ("STACK"), zero_init));
    
    int main()
    {
        return sizeof(altstack);	
    }
    
  2. ソースをコンパイルします。

    armcc -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. 以下のような fromelf の出力結果から、STACK シンボルと altstack シンボルを探します。

    ...
    ** 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 実行領域に存在することがわかります。

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0477EJ
Non-ConfidentialID081711