开发者社区> x64.ink> 正文

linux内核符号表kallsyms简介

简介: 在使用perf排查问题时,我们经常会发现[kernel.kallsyms]这个模块。这到底是个什么东西呢?
+关注继续查看

简介:

在2.6版的内核中,为了更方便的调试内核代码,开发者考虑将内核代码中所有函数以及所有非栈变量的地址抽取出来,形成是一个简单的数据块(data blob:符号和地址对应),并将此链接进 vmlinux 中去。

在需要的时候,内核就可以将符号地址信息以及符号名称都显示出来,方便开发者对内核代码的调试。完成这一地址抽取+数据快组织封装功能的相关子系统就称之为 kallsyms。

反之,如果没有 kallsyms 的帮助,内核只能将十六进制的符号地址呈现给外界,因为它能理解的只有符号地址,并不能显示各种函数名等符号。

kallsyms抽取了内核用到的所有函数地址(全局的、静态的)和非栈数据变量地址,生成一个数据块,作为只读数据链接进kernel image,相当于内核中存了一个System.map。

开启kallsyms

要在一个内核中启用 kallsyms 功能。须设置 CONFIG_KALLSYMS 选项为y;如果要在 kallsyms 中包含全部符号信息,须设置 CONFIG_KALLSYMS_ALL 为y

查看kallsyms表:

得益于/proc文件系统,我们可以直接读取这个表。

1$ less /proc/kallsyms

Example:

01000000000000a018 D per_cpu__xen_vcpu
02000000000000a020 D per_cpu__xen_vcpu_info
03000000000000a060 d per_cpu__mc_buffer
04000000000000b570 D per_cpu__xen_mc_irq_flags
05000000000000b578 D per_cpu__xen_cr3
06000000000000b580 D per_cpu__xen_current_cr3
07000000000000b5a0 d per_cpu__xen_runstate
08000000000000b5e0 d per_cpu__xen_runstate_snapshot
09000000000000b610 d per_cpu__xen_residual_stolen
10000000000000b618 d per_cpu__xen_residual_blocked
11000000000000b620 d per_cpu__xen_clock_events
12000000000000b6a0 d per_cpu__xen_debug_irq
13000000000000b6a4 d per_cpu__xen_resched_irq
14000000000000b6a8 d per_cpu__xen_callfunc_irq
15000000000000b6ac d per_cpu__xen_callfuncsingle_irq

列表的项:

这个应该可以很容易看出,第一列为符号地址,第二列为类型,第三列为符号名。

注意:如果发现符号地址均为0,那是因为系统保护。使用root权限查看即可。

第二列的类型:

有的符号是大写的,有的是小写。大写的符号是全局的。

  1. b 符号在未初始化数据区(BSS)
  2. c 普通符号,是未初始化区域
  3. d 符号在初始化数据区
  4. g 符号针对小object,在初始化数据区
  5. i 非直接引用其他符号的符号
  6. n 调试符号
  7. r 符号在只读数据区
  8. s 符号针对小object,在未初始化数据区
  9. t 符号在代码段
  10. u 符号未定义

转载请注明:云计算技术笔记 » linux内核符号表kallsyms简介

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——内核国密算法(1)
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——内核国密算法(1)
19 0
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——内核国密算法(2)
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——内核国密算法(2)
23 0
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——文件加密(fscrypt)(1)
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——文件加密(fscrypt)(1)
16 0
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——磁盘加密(LUKS)
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——磁盘加密(LUKS)
12 0
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——内核完整性度量架构(IMA)(1)
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——内核完整性度量架构(IMA)(1)
12 0
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——内核完整性度量架构(IMA)(2)
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——内核完整性度量架构(IMA)(2)
10 0
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——内核完整性度量架构(IMA)(3)
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——内核完整性度量架构(IMA)(3)
11 0
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——内核模块签名
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——内核模块签名
15 0
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——Kernel TLS (KTLS) 实践
《商用密码技术最佳实践白皮书》——07 Linux 内核国密支持——Kernel TLS (KTLS) 实践
13 0
【Linux】基础IO --- 内核级和用户级缓冲区、磁盘结构、磁盘的分治管理、block group块组剖析…
【Linux】基础IO --- 内核级和用户级缓冲区、磁盘结构、磁盘的分治管理、block group块组剖析…
41 0
+关注
x64.ink
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
ECS运维指南 之 Linux系统诊断
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多
相关镜像