Linux System.map文件【转】
转自:http://blog.csdn.net/ysbj123/article/details/51233618
当运行GNU链接器gld(ld)时若使用了"-M"选项,或者使用nm命令,则会在标准输出设备(通常是屏幕)上打印出链接映像(link map)信息,即是指由链接程序产生的目标程序内存地址映像信息。其中列出了程序段装入到内存中的位置信息。具体来讲有如下信息:
目标文件及符号信息映射到内存中的位置。
公共符号如何放置。
链接中包含的所有文件成员及其引用的符号。
通常我们会把发送到标准输出设备的链接映像信息重定向到一个文件中(例如System.map)。在编译内核时,Linux/Makefile文件产生的System.map文件就用于存放内核符号表信息。符号表是所有内核符号及其对应地址的一个列表,当然也包括上面说明的_etext、_edata和_end等符号的地址信息。随着每次内核的编译,就会产生一个新的对应System.map文件。当内核运行出错时,通过System.map文件中的符号表解析,就可以查到一个地址值对应的变量名,或反之。
利用System.map符号表文件,在内核或相关程序出错时,就可以获得我们比较容易识别的信息。符号表的样例如下所示:
c03441a0 B dmi_broken  | 
其中每行说明一个符号,第1栏指明符号值(地址);第2栏是符号类型,指明符号位于目标文件的哪个区(sections)或其属性;第3栏是对应的符号名称。
第2栏中的符号类型指示符通常有表3-5所示的几种,另外还有一些与采用的目标文件格式相关。如果符号类型是小写字符,则说明符号是局部的;如果是大写字符,则说明符号是全局的(外部的)。参见文件include/a.out.h中nlist{}结构n_type字段的定义(第110~185行)。
表3-5 目标文件符号列表文件中的符号类型
| 
 符号类型  | 
 名称  | 
 说明  | 
| 
 A  | 
 Absolute  | 
 符号的值是绝对值,并且在进一步链接过程中不会被改变  | 
| 
 B  | 
 BSS  | 
 符号在未初始化数据区或区(section)中,即在BSS段中  | 
| 
 C  | 
 Common  | 
 符号是公共的。公共符号是未初始化的数据。在链接时,多个公共符号可能具有同一名称。如果该符号定义在其他地方,则公共符号被看作是未定义的引用  | 
| 
 D  | 
 Data  | 
 符号在已初始化数据区中  | 
| 
 G  | 
 Global  | 
 符号是在小对象已初始化数据区中的符号。某些目标文件的格式允许对小数据对象(例如一个全局整型变量)可进行更有效的访问  | 
| 
 I  | 
 Inderect  | 
 符号是对另一个符号的间接引用  | 
| 
 N  | 
 Debugging  | 
 符号是一个调试符号  | 
| 
 R  | 
 Read only  | 
 符号在一个只读数据区中  | 
| 
 S  | 
 Small  | 
 符号是小对象未初始化数据区中的符号  | 
| 
 T  | 
 Text  | 
 符号是代码区中的符号  | 
| 
 U  | 
 Undefined  | 
 符号是外部的,并且其值为0(未定义)  | 
| 
 -  | 
 Stabs  | 
 符号是a.out目标文件中的一个stab符号,用于保存调试信息  | 
| 
 ?  | 
 Unknown  | 
 符号的类型未知,或者与具体文件格式有关  | 
可以看出名称为dmi_broken的变量位于内核地址0xc03441a0处。
System.map位于使用它的软件(例如内核日志记录后台程序klogd)能够寻找到的地方。在系统启动时,如果没有以一个参数的形式为klogd给出System.map的位置,则klogd将会在三个地方搜寻System.map。依次为:
/boot/System.map  | 
尽管内核本身实际上不使用System.map,但其他程序,像klogd、lsof、ps以及dosemu等许多软件都需要有一个正确的System.map文件。利用该文件,这些程序就可以根据已知的内存地址查找出对应的内核变量名称,便于对内核的调试工作。
Linux System.map文件【转】的更多相关文章
- System.map文件【转】
		
转自:http://blog.csdn.net/david104/article/details/7194185 当运行GNU链接器gld(ld)时若使用了"-M"选项,或者使用n ...
 - System.map文件的作用
		
有关System.map文件的信息好象很缺乏.其实它一点也不神秘,并且在整个事情当中它并不象看上去那么得重要.但是由于缺乏必要的文档说明,使其显得比较神秘.它就象耳垂,我们每个人都有,但却不知道是干什 ...
 - System.map文件的作用解析
		
有关System.map文件的信息好象很缺乏.其实它一点也不神秘,并且在整个事情当中它并不象看上去那么得重要.但是由于缺乏必要的文档说明,使其显得比较神秘.它就象耳垂,我们每个人都有,但却不知道是干什 ...
 - Linux内核Makefile文件(翻译自内核手册)
		
--译自Linux3.9.5 Kernel Makefiles(内核目录documention/kbuild/makefiles.txt) kbuild(kernel build) 内核编译器 Thi ...
 - auto make System.map to C header file
		
#!/bin/bash # auto make System.map to C header file # 说明: # 该脚本主要是将Linux内核生成的System.map文件中的符号.地址存入结构 ...
 - 内核编译之vmlinuz vmlinux system.map initrd
		
一.vmlinuz vmlinuz是可引导的.压缩的内核.“vm”代表“Virtual Memory”.Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制.Linux能够使用 ...
 - System.map
		
System.map是一个特定内核的内核符号表.它是你当前运行的内核的System.map的链接. 内核符号表是怎么创建的呢? System.map是由“nm vmlinux”产生并且不相关的符号被滤 ...
 - Linux System Reinforcement、Intrusion Detection Based On syslog
		
目录 .文件系统及访问权限 . Linux Syslog . Linux日志审计 . 帐号安全管理 . 基础物理安全 . 系统编译环境安全 . 系统病毒.后门.rootkit安全 . 系统端口.服务安 ...
 - Linux system log avahi-daemon[3733]: Invalid query packet
		
在检查Linux的日志文件时,发现大量 avahi-daemon[3733]: Invalid query packet错误(不同服务器对应的数字有所不同) Aug 3 07:00:01 hostn ...
 
随机推荐
- CodeChef LEMOVIE
			
题意:给你n个数字(下标不同数值相同的数字应当被认为是不同的数字),有n!种排列方式.每种排列方式的价值定义为:第一次出现时比前面的所有数字都大的数值个数. 比如1,2,2,3这个排列中,1,2,3这 ...
 - BZOJ4736 温暖会指引我们前行(LCT+最大生成树)
			
类似于瓶颈路,满足条件的路径一定在温度的最大生成树上,那么就是一个LCT维护MST的裸题了. #include<iostream> #include<cstdio> #incl ...
 - hdu 2151 Worm (DP)
			
Worm Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
 - P2845 [USACO15DEC]Switching on the Lights 开关灯
			
题目背景 来源:usaco-2015-dec Farm John 最近新建了一批巨大的牛棚.这些牛棚构成了一个N*N的矩形网络.(1<n<100) 然而bessie十分怕黑,他想计算可以把 ...
 - [LOJ2540] [PKUWC2018] 随机算法
			
题目链接 LOJ:https://loj.ac/problem/2540 Solution 写的时候脑子不太清醒码了好长然后时间\(LOJ\)垫底... 反正随便状压\(dp\)一下就好了,设\(f[ ...
 - [洛谷P3346][ZJOI2015]诸神眷顾的幻想乡
			
题目大意:给你一棵$n$个点的树,最多有$20$个叶子节点,问共有几个不同的子串 题解:广义$SAM$,对每个叶子节点深搜一次,每个节点的$lst$设为这个节点当时的父亲,这样就可以时建出来的$SAM ...
 - [CF551E]GukiZ and GukiZiana
			
题目大意:一个长度为$n(n\leqslant5\times10^5)$的数组,有两个操作: $1\;l\;r\;x:$把区间$[l,r]$加上$x$ $2\;x:$询问$x$第一次出现和最后一次出现 ...
 - hdu ACM Steps Section 1 花式A+B 输入输出格式
			
acm与oi很大的一个不同就是在输入格式上.oi往往是单组数据,而acm往往是多组数据,而且题目对数据格式往往各有要求,这8道a+b(吐槽..)涉及到了大量的常用的输入输出格式.https://wen ...
 - Mac安装mysqldb
			
一. 安装mysql (一)下载地址 https://pan.baidu.com/s/1slw50LZ 安装成功后,在系统偏好设置里有MySQL图标,可以启动或关闭MySQL 二. Mysql roo ...
 - Nginx反向代理两个tomcat服务器
			
第一步,在Linux上安装两个tomcat,修改好端口号后,启动起来. 第二步,配置本地的DNS解析,即修改host文件: 第三步,配置Nginx配置文件 反向代理的配置虚拟主机配置差不多也要配置虚拟 ...