web-dev-qa-db-ja.com

readelfによって表示されるシンボルテーブルの列の意味は何ですか?

誰かがreadelfを使用してシンボルテーブルの表示される列を説明できますか?

46
Swaroop S

以下を検討してください。

シンボルテーブル.symtabには1203のエントリがあります:

 Num:    Value  Size Type    Bind   Vis      Ndx Name
 310: a0008120     0 NOTYPE  GLOBAL DEFAULT  ABS _gp  
 734: a0000010    32 OBJECT  GLOBAL DEFAULT   77 v 
 818: 9d000018   496 FUNC    GLOBAL DEFAULT   71 main 
 849: a0000124     4 OBJECT  GLOBAL DEFAULT   78 phrase 
 955: a0000000     9 OBJECT  GLOBAL DEFAULT   77 peppers  
1020: a000023c   192 OBJECT  GLOBAL DEFAULT   80 bins
  • Num: =シンボル番号
  • Value =シンボルのアドレス
  • Size =シンボルのサイズ
  • Type =シンボルタイプ:Func =関数、ObjectFile(ソースファイル名)、Section =メモリセクション、Notype =型付けされていない絶対シンボルまたは未定義
  • Bind = GLOBALバインディングは、シンボルがファイルの外部に表示されることを意味します。 LOCALバインディングはファイルでのみ表示されます。 WEAKはグローバルのようなもので、シンボルを上書きできます。
  • Vis =シンボルは、デフォルト、保護、非表示、または内部にすることができます。
  • Ndx =シンボルが含まれるセクション番号。ABSは絶対を意味します。セクションアドレスの再配置には調整されません。
  • Name =シンボル名
47
Caladain

次のいずれかを行うことができます。

man readelf

またはこれらのチュートリアルを見てください:

2
the_void

Ndxフィールドは、そのシンボルが定義されているセクション番号を示していると思います。

readelf -a <file>、およびアドレスが特定のシンボルに対応するセクションを見つけます。

そのセクションのセクション番号がNdxフィールドに表示されると思います。

0
T.I.