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
c03441a4 B is_sony_vaio_laptop
c03441c0 b dmi_ident
c0344200 b pci_bios_present
c0344204 b pirq_table

其中每行说明一个符号,第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
/usr/src/linux/System.map

尽管内核本身实际上不使用System.map,但其他程序,像klogd、lsof、ps以及dosemu等许多软件都需要有一个正确的System.map文件。利用该文件,这些程序就可以根据已知的内存地址查找出对应的内核变量名称,便于对内核的调试工作。

时间: 2024-08-01 12:58:51

Linux System.map文件【转】的相关文章

System.map文件【转】

转自:http://blog.csdn.net/david104/article/details/7194185 当运行GNU链接器gld(ld)时若使用了"-M"选项,或者使用nm命令,则会在标准输出设备(通常是屏幕)上打印出链接映像(link map)信息,即是指由链接程序产生的目标程序内存地址映像信息.其中列出了程序段装入到内存中的位置信息.具体来讲有如下信息: 目标文件及符号信息映射到内存中的位置. 公共符号如何放置. 链接中包含的所有文件成员及其引用的符号. 通常我们会把发送

auto make System.map to C header file

#!/bin/bash # auto make System.map to C header file # 说明: # 该脚本主要是将Linux内核生成的System.map文件中的符号.地址存入结构体中, # 目前认为也许可以在内核驱动中直接调用对应的函数.以前在学习裸板开发中就有 # 使用Uboot中提供的printf来写程序的先例,那么这里应该也是可以的,不过这里没 # 有什么实用性,因为5W个函数,但这个结构体就要用掉进200kByte空间. # # 2016-3-19 深圳 南山平山村

Linux system log avahi-daemon[3733]: Invalid query packet

在检查Linux的日志文件时,发现大量 avahi-daemon[3733]: Invalid query packet错误(不同服务器对应的数字有所不同) Aug  3 07:00:01 hostname auditd[3143]: Audit daemon rotating log files Aug  3 08:02:39 hostname avahi-daemon[3733]: Invalid query packet. Aug  3 08:03:19 hostname last mes

如何在windows下和linux下获取文件(如exe文件)的详细信息和属性

程序员都很懒,你懂的! 最近在项目开发中,由cs开发的exe的程序,需要自动升级,该exe程序放在linux下,自动升级时检测不到该exe程序的版本号信息,但是我们客户端的exe程序需要获取服务器上新程序的版本号信息.最后由我用java实现linux上exe文件的版本号读取功能.下面是详细代码: package com.herman.utils; import java.io.File; import java.io.FileNotFoundException; import java.io.I

Linux下利用文件描述符恢复的成功失败实验

    数据误删除是作为初级运维人员常常遇到的"低级错误",一些有经验的老手有时也在疲劳.不冷静的情况下"马失前蹄".一旦误删除数据文件,尽快采用影响最小.最迅速的手段恢复数据库是第一要务. 恢复数据的方法很多,比如冷热备份.闪回数据库等等,如果是直接从操作系统OS层面删除数据文件,在Linux/Unix环境下,有一些优选手段可以使用.其中之一就是文件描述符(File Description).   1.聊聊File Description   不同的操作系统,在实

Linux中cp文件或目录时如何显示进度?

Linux中cp文件或目录时如何显示进度? 用法:cp [选项]... [-T] 源文件 目标文件 或:cp [选项]... 源文件... 目录 或:cp [选项]... -t 目录 源文件...将源文件复制至目标文件,或将多个源文件复制至目标目录. 长选项必须使用的参数对于短选项时也是必需使用的.&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; -a, --archive                 等于-d

Linux C实现文件传输

file_server.c  文件传输顺序服务器示例 //////////////////////////////////////////////////////////////////////////////////////< br>// file_server.c 文件传输顺序服务器示例 //////////////////////////////////////////////////////////////////////////////////////// 本文件是服务器的代码#in

使用root权限删除不了linux中的文件该如何处理?

在Linux系统中,root用户拥有最高权限,可以干任何事情,删除任何不需要的软件或者文件,可以说无所不能.但有时候root用户却不能删除一个小文件,一个看似普普通通的文件,其实只要root用户更改下这个文件的属性,还是可以删除的.一个用户想删除Linux中有一个文件,结果删除不了说没有权限,只能用root用户删除,但还是一样的结果说无法删除,该怎么办呢?下面我们来看看解决办法 步骤如下: 1.首先删除一个文件,提示'Operation not permitter',普通用户不能删除; 2.把用

Linux如何搜索文件的方法

  在Linux上查找某个文件是一件比较麻烦的事情.毕竟在Linux中需要我们使用专用的"查找"命令来寻找在硬盘上的文件. Linux下的文件表达格式非常复杂,不象WINDOWS,DOS下都是统一的AAAAAAA.BBB格式,那么方便查找,在WINDOWS中,只要知道要查找的文件的文件名或者后缀就非常容易查找到.Linux中查找文件的命令通常为"find"命令,"find"命令能帮助我们在使用,管理Linux的日常事务中方便的查找出我们需要的文件