System.map

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

符號表是一個在符號名稱與它們的記憶體位置間的查詢表格。符號名稱可能是變數的名稱或是函數名稱。當要查詢符號名稱的位置或是特定位置的符號名稱時,就會需要System.map。對於内核错误内核oops的除錯特別有用。當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工具程式列出了所有目標檔案的符號。而System.map則是直接與其相關,因為這個檔案是在整個核心程式上由nm所產生的 - 就像nm列出任意小的目標程式的符號及它們的類型[4]

這些類型的一部份:[4]

  • A 絕對的
  • Bb 未初始化的資料段(稱為BSS)
  • Dd 已初始化的資料段
  • Gg 小目標的已初始化資料段(全域)
  • i 特定的DLL段
  • N 除錯符號
  • p 堆疊展開段
  • Rr 唯讀資料段
  • Ss 小目標的未初始化資料段
  • Tt 文字(代碼)段
  • U 未定義
  • Vv 弱目標
  • Ww 尚未被標記的弱目標
  • - 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-04-14 [2014-04-06]. (原始内容存档于2014-07-12). 
  2. ^ Peter Jay Salzman. The system.map File. Rlworkman.net. 2003-05-28 [2014-04-06]. (原始内容存档于2014-04-06). 
  3. ^ Kernel-HOWTO. faqs.org. [2014-04-06]. (原始内容存档于2014-04-06). 
  4. ^ 4.0 4.1 nm(1): symbols from object files - Linux man page. Linux.die.net. [2014-04-06]. (原始内容存档于2014-04-02). 
  5. ^ Peter's Notes: System.map. Linuxmafia.com. 2003-05-29 [2014-04-06]. (原始内容存档于2015-07-31). 

參見

Linux
Linux内核
争议
Linux发行版
组织
采用
媒体
  • 自由软件杂志英语Free Software Magazine
  • Linux.com
  • Linux Format英语Linux Format
  • Open Source For You英语Open Source For You
  • Linux Gazette英语Linux Gazette
  • Linux Journal英语Linux Journal
  • Linux Magazine英语Linux Magazine
  • LinuxUser英语LinuxUser
    • Ubuntu User英语Ubuntu User
  • Linux Outlaws英语Linux Outlaws
  • Linux Voice英语Linux Voice
  • LugRadio英语LugRadio
  • LWN.net
  • Phoronix
  • 操作系统革命
  • 《代码》(2001年电影)
人物
  • 分类 Linux
  • 分类 Linux内核功能
  • 主题 Linux主題
  • 共享资源页面共享资源
  • 专题 Linux专题
组织
内核
支持
技术
调试
  • CRIU英语CRIU
  • ftrace英语ftrace
  • kdump
  • Linux内核oops
  • SystemTap英语SystemTap
启动过程
ABI
API
用户空间
FS守护进程
封装库
内核部分
系统调用接口
内核内
  • ALSA
  • DRI
  • Video4Linux
  • New API英语New API
  • Crypto API英语Crypto API (Linux)
内核组件
  • 安全模块AppArmor
  • Exec Shield英语Exec Shield
  • grsecurity英语grsecurity
    • PaX英语PaX
  • seccomp英语seccomp
  • SELinux
  • Smack
  • TOMOYO Linux英语TOMOYO Linux
  • Linux PAM英语Linux PAM
  • initramfs
  • kexec
  • kGraft英语kGraft
  • kpatch英语kpatch
  • Ksplice
变种
虛擬化
采用
使用范围
采用者
  • Linux采用者列表
  • GENIVI联盟
  • Linux专有软件
人物
  • 分类 分类
  • 共享资源页面 共享资源
  • 维基百科图书 教科书
  • 维基学院页面 学院
  • 主题 主题