5.4 リンク時のシンボルの場所を調べる方法

リンク時のシンボルの場所を調べるには、 シンボルを定義しているセクションを見つけ、そのリンカがそのセクションから削除されていないことを確認する必要があります。

リンク時のシンボルの場所を調べるには、--keep=section_id オプションと --symbols オプションを使用します。たとえば、 object(section) がシンボルを含むセクションの場合は、 以下のコマンドを入力します。

armlink --keep=object(section) --symbols s.o --output=s.axf
      

You can also run fromelf -s on the resultant image.

以下の手順に従います。

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

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

    armcc -c s.c -o s.o

  3. オブジェクト s.o をリンクし、STACK シンボルを残したまま、 そのシンボルを表示します。

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

  4. 出力から STACK シンボルを検索します。以下に例を示します。

    ======================================================================
    
    Image Symbol Table
    
        [ローカルシンボル](Local Symbols)
    
        Symbol Name                        Value     Ov Type        Size  Object(Section)
    …     STACK                              0x00008200   Section       80  s.o(STACK)
    
        Global Symbols
    
        Symbol Name                        Value     Ov Type        Size  Object(Section)
    …     altstack                           0x00008200   Data          80  s.o(STACK)     Image$$ZI$$Limit                   0x00008250   Number         0  s.o(STACK)
    

    以上の結果から、スタックが ZI 実行領域に存在することがわかります。

非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.