Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1595984
  • 博文数量: 92
  • 博客积分: 2002
  • 博客等级: 大尉
  • 技术积分: 4717
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-01 17:09
文章分类

全部博文(92)

文章存档

2013年(1)

2012年(6)

2011年(85)

分类: LINUX

2011-01-20 10:17:07


System.map是内核符号表文件,是由“
nm vmlinux”命令产生的,位于源码根目录。
所谓“符号”就是函数名,全局变量名等东东,这个表就记录的这些“符号”在内核中的运行地址。(这个地址是Effective Address,虚地址)

下面是文件的一个片段:
  1. c032ee18 t genl_init
  2. c032ef18 T netfilter_init
  3. c032efcc T netfilter_log_init
  4. c032f020 T netfilter_queue_init
  5. c032f074 t nfnetlink_init
  6. c032f0fc t nfnetlink_queue_init
  7. c032f1e4 t nfnetlink_log_init
  8. c032f2d0 T nf_conntrack_init
  9. c032f48c t nf_conntrack_standalone_init
  10. c032f57c T nf_conntrack_expect_init
  11. c032f67c t ctnetlink_init

由上可知,netfilter_init() 的地址就是 0xc032ef18
这对调试内核非常有用。比如内核调用了一个函数指针,想知道它到底指向哪个函数,直接printk这个函数指针的地址,根据地址一查表就ok了。


符号类型

名称

说明

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

符号的类型未知,或者与具体文件格式有关



PS. linux内核启动后,可以通过 cat /proc/kallsyms 来查看符号表。


查看符号表的命令

nm -n  enetdbg.ko
ld enetdbg.ko --print-map

阅读(10616) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~