最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

oops and system.map

工作和技术 crifan 1704浏览 0评论

符号链表中的内容是
一个地址 对应这一个函数,也就是函数指针位置,后面的是函数名

而内核的符号链表,也是同样的含义

内核进程中,有个进程 klogd,kernel log deamon 进程,监视内核进程,
其作用就是,解析 符号(函数名)和地址之间的关系。

oops,是系统出现问题了,比如内核崩溃,kernel panic了,会打印出当时的状态
包括CPU的EIP,各个寄存器的值
堆栈的内容,还有就是 backstrace,回溯函数调用的过程
这个回溯的过程,内部就是用到了内核符号表,将对应的函数的地址,翻译成对应的函数名,然后一个一个显示出来,否则我们看到的就只是一堆地址,这就是内核符号表的作用了。
也因此,说oops是和符号表是有关系的。

实际上,klogd使用到了两种类型的地址:
1.静态翻译,也就是使用system.map文件
2.动态翻译,使用到了动态可加载模块。
简单解释就是:
如果你是在一个可加载模块中出现了oops,这时候klogd就会去尝试翻译解析,但是却发现system.map中没有这个地址,所以就断定是可加载模块中有对应的地址,然后就会去向kernel要,原先模块导出到内核符号表中的那些符号,即使模块作者没有导出这些符号,那么klogd最终也会知道到底是哪个模块产生了这个oops,这比对于oops什么都不知道,要强很多。

理解自:The system.map File

转载请注明:在路上 » oops and system.map

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
79 queries in 0.179 seconds, using 22.09MB memory