System.map

在Linux中，System.map檔案是被内核所使用的符号表。 

符號表是一個在符號名稱與它們的記憶體位置間的查詢表格。符號名稱可能是變數的名稱或是函數名稱。當要查詢符號名稱的位置或是特定位置的符號名稱時，就會需要System.map。對於内核错误及内核oops的除錯特別有用。當CONFIG_KALLSYMS啟用時，核心會自行做位置到名稱的轉換，所以像是ksymoops這一類的工具並不是必要的。

 內部 
以下是System.map檔案的一部份內容：

因為位置在每次構建時都會變動，所以核心每一次新的構建都會產生新的System.map。

 符號類型 
在位置及符號中間的字符（以空格分開）是符號的類型。UNIX操作系统上的nm工具程式列出了所有目標檔案的符號。而System.map則是直接與其相關，因為這個檔案是在整個核心程式上由nm所產生的 － 就像nm列出任意小的目標程式的符號及它們的類型。

這些類型的一部份：

 A 絕對的
 B 或 b 未初始化的資料段（稱為BSS）
 D 或 d 已初始化的資料段
 G 或 g 小目標的已初始化資料段（全域）
 i 特定的DLL段
 N 除錯符號
 p 堆疊展開段
 R 或 r 唯讀資料段
 S 或 s 小目標的未初始化資料段
 T 或 t 文字（代碼）段
 U 未定義
 V 或 v 弱目標
 W 或 w 尚未被標記的弱目標
 - a.out目標檔案的符號戳
 ? 「符號類型未知」

 檔案系統位置 
在Linux内核構建完成後，System.map可能位於原始目錄的根。然而，另外一些軟體可能會希望這個檔案位於其他地方：

 像是 /boot/System.map-$(uname -r)
 在構建SVGALib時預期會找到/lib/modules/$(uname -r)/build/System.map

 参考文献 

 參見 
 内核oops
 内核错误


Category:可执行文件格式
Category:Linux內核