|
Linuxにおいて、System.mapファイルとはカーネルが使用するシンボルテーブルである。 シンボルテーブルはメモリ上でシンボル名とアドレスの対応関係を示す。シンボル名は、値もしくは関数名である場合が多い。System.mapファイルは、シンボル名のアドレスまたはアドレスの示すシンボル名が必要とされるケースにおいて要求される。とりわけこれはカーネルパニックやLinux kernel oopsが発生した場合、そのデバッグの役に立つ。カーネルは、コンフィグレーション(Kconfig)にて CONFIG_KALLSYMS を有効化すると自身のアドレス-名前変換を行う。この処理にはksymoopsのようなツールは最早必要としない〔 NOTE: ksymoops is useless on 2.6.〕。次の項目は System.map ファイルの一部である。:
nmコマンドの出力結果そのものであることが理解できる。 スペースで区切られた、アドレスとシンボルの間の文字列は、そのシンボルの「型」を示している。UNIXシステムにおけるnmユーティリティプログラムはオブジェクトファイルからシンボルをリストアップする。System.mapファイルは直接これと関係しており、すなわち、カーネル(をあたかも、プログラムとみなして)全体にnmコマンドを掛け、その出力結果をこのファイルに書き出したものであることが分かる。それは、カーネルよりももっと小さいオブジェクトファイルに対し、nmがシンボルとその型をリストアップすることと同様である。 カーネルビルドのプロセスを含めて説明すると、通常、Linuxカーネルビルドの最終段階に到達すると、実行ファイル"vmlinux"が生成される。このファイルに対し、nmコマンドを実行し、その出力結果をSystem.mapファイルとして生成する。ちなみにSystem.map生成後は、vmlinuxからシンボルがストリップされ、特殊なコードをリンク、圧縮し、"zImage"もしくは"bzImage"というファイルが生成される。これが通常目にするカーネル本体である。アドレスはコンパイル時に決定されるため、カーネルビルドの度に System.map ファイルが生成される。型のいくつかを説明する(用語はELFに倣っている):
== ファイルシステムにおけるSystem.mapファイルの配置 == カーネルのビルドが正常終了すると、 System.map はカーネルソースコードのトップディレクトリに作られるが、いくつかの上位のソフトウェアインストレーションステップにより、その他のディレクトリにコピーされ得る:* /boot/System.map-$(uname -r) *SVGALibのビルドにおいては /lib/modules/$(uname -r)/build/System.map に存在することを仮定している。また /proc/kallsyms はLinuxカーネルバージョン2.5.71以上のシステムにおいて、読み込まれているシンボル名とアドレスを表示する〔〕。それはSystem.mapファイルの一部に相当する。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「System.map」の詳細全文を読む スポンサード リンク
|