システムマップ

Linuxカーネルで使用されるシンボルテーブル

LinuxではSystem.mapファイルはカーネルによって使用されるシンボル テーブルです

シンボルテーブルは、シンボル名とメモリ上のアドレスを関連付けるテーブルです。シンボル名は変数名または関数名のいずれかです。System.mapは、シンボル名のアドレス、またはアドレスのシンボル名が必要な場合に必要です。これは、カーネルパニックカーネルoopsのデバッグに特に役立ちます。System.mapが有効になっている場合、カーネルはアドレスから名前への変換を自ら行うCONFIG_KALLSYMSため、ksymoopsなどのツールは必要ありません。[1]

内部

以下はSystem.mapファイルの一部です: [2]

c041bc90 b packet_sklist c041bc94 b packet_sklist_lock c041bc94 b packet_socks_nr c041bc98 A __bss_stop c041bc98 A _end c041c000 A pg0 ffffe400 A __kernel_vsyscall ffffe410 A SYSENTER_RETURN ffffe420 A __kernel_sigreturn ffffe440 A __kernel_rt_sigreturn  
  
  
  
  
  
  
  
  
  

アドレスはビルドごとに変わる可能性があるため、System.mapカーネルのビルドごとに新しいアドレスが生成されます。[3]

シンボルの種類

アドレスとシンボル(スペースで区切られる)の間にある文字は、シンボルの型を表します。Unixシステムnmのユーティリティプログラムは、オブジェクトファイルからシンボルをリストします。このファイルはカーネルプログラム全体から生成されるため、直接関連しています。これは、小さなオブジェクトプログラムのシンボルとその型をリストするのと同様です。[4]System.mapnmnm

これらのタイプには次のようなものがある: [4]

  • A絶対的な
  • Bまたはb初期化されていないデータセクション(BSSと呼ばれる)
  • Dまたはd初期化されたデータセクションの場合
  • Gまたはg小さなオブジェクトの初期化されたデータセクション(グローバル)
  • iDLL固有のセクション
  • Nデバッグシンボル用
  • pスタックアンワインドセクション用
  • Rまたはr読み取り専用データセクションの場合
  • Sまたはs小さなオブジェクトの初期化されていないデータセクション
  • Tまたはtテキスト(コード)セクション
  • U未定義の
  • Vまたはv弱いオブジェクトの場合
  • Wまたは、wタグ付けされていない弱いオブジェクトの場合
  • -a.out オブジェクトファイル内のスタブシンボル
  • ?「シンボルタイプ不明」の場合

ファイルシステムの場所

LinuxカーネルをビルドするとSystem.mapソースディレクトリのルートに配置されます。ただし、その後のソフトウェアインストール手順では、このファイルが別の場所に配置されます。[5]

  • として/boot/System.map-$(uname -r)
  • SVGAlibを構築すると、/lib/modules/$(uname -r)/build/System.map

参照

参考文献

  1. ^ 「FAQ/System.map - Linux Kernel Newbies」. kernelnewbies.org. 2006年4月14日. 2014年4月6日閲覧
  2. ^ Peter Jay Salzman (2003年5月28日). 「system.mapファイル」. Rlworkman.net . 2014年4月6日閲覧。
  3. ^ "Kernel-HOWTO". faqs.org . 2014年4月6日閲覧。
  4. ^ ab "nm(1): オブジェクトファイルからのシンボル - Linux manページ". Linux.die.net . 2014年4月6日閲覧
  5. ^ 「Peter's Notes: System.map」Linuxmafia.com. 2003年5月29日. 2014年4月6日閲覧
「https://en.wikipedia.org/w/index.php?title=System.map&oldid=1288099122」より取得