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]
参照
参考文献
- ^ 「FAQ/System.map - Linux Kernel Newbies」. kernelnewbies.org. 2006年4月14日. 2014年4月6日閲覧。
- ^ Peter Jay Salzman (2003年5月28日). 「system.mapファイル」. Rlworkman.net . 2014年4月6日閲覧。
- ^ "Kernel-HOWTO". faqs.org . 2014年4月6日閲覧。
- ^ ab "nm(1): オブジェクトファイルからのシンボル - Linux manページ". Linux.die.net . 2014年4月6日閲覧。
- ^ 「Peter's Notes: System.map」Linuxmafia.com. 2003年5月29日. 2014年4月6日閲覧。