System.map文件简介
秦白衣
Arethe Qin
System.map是内核使用的符号表,关联了符号的名称以及它们在内存中的地址。符号名称是指内核中变量或函数的名字。当我们需要根据符号名称查找其地址,或者查找某个地址上的符号名称时,就需要用到System.map了。特别是在调试kernel panics与kernel oopses时,System.map非常有用。
下面是System.map文件中的部分内容:
0000040c AVDSO32_rt_sigreturn
00000414 AVDSO32_vsyscall
00000424 AVDSO32_SYSENTER_RETURN
00400000 A phys_startup_32
c0400000 T _text
c0400000 T startup_32
c0400054 tdefault_entry
c0401000 T _stext
c040100a Tdo_one_initcall
c0401160 trun_init_process
c040117e t init_post
c0401258 Tname_to_dev_t
c0401428 t create_dev
c040146b ttrace_kmalloc.clone.0
c04014b8 tcreate_dev.clone.0
c04014e0 t create_dev
每次编译内核时符号的地址均不同,因而编译内核的同时都会生成一个相应的System.map文件。在System.map文件中,地址与符号之间的字母代表符号的类型。这里的类型定义与nm中类型的定义是一样的。下面我们便罗列出这些类型。
A | 绝对 |
B或b | 未初始化的数据段(BSS) |
D或d | 初始化的数据段 |
G或g | 小对象的初始化数据段(全局的) |
i | DLL相关的段 |
N | 调试用符号 |
p | 堆栈的展开段(stack unwind section) |
R或r | 只读数据段 |
S或s | 小对象的未初始化数据段 |
T或t | 代码段 |
U | 未定义 |
V或v | 弱对象(weak object) |
W或w | 没有标签的弱对象(weak object) |
- | a.out目标文件中的桩符号(stabs symbol) |
? | 未知符号 |