linux 内核符号表 在哪个文件夹,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:

01

000000000000a018 D per_cpu__xen_vcpu

02

000000000000a020 D per_cpu__xen_vcpu_info

03

000000000000a060 d per_cpu__mc_buffer

04

000000000000b570 D per_cpu__xen_mc_irq_flags

05

000000000000b578 D per_cpu__xen_cr3

06

000000000000b580 D per_cpu__xen_current_cr3

07

000000000000b5a0 d per_cpu__xen_runstate

08

000000000000b5e0 d per_cpu__xen_runstate_snapshot

09

000000000000b610 d per_cpu__xen_residual_stolen

10

000000000000b618 d per_cpu__xen_residual_blocked

11

000000000000b620 d per_cpu__xen_clock_events

12

000000000000b6a0 d per_cpu__xen_debug_irq

13

000000000000b6a4 d per_cpu__xen_resched_irq

14

000000000000b6a8 d per_cpu__xen_callfunc_irq

15

000000000000b6ac d per_cpu__xen_callfuncsingle_irq

列表的项:

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

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

第二列的类型:

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

b 符号在未初始化数据区(BSS)

c 普通符号,是未初始化区域

d 符号在初始化数据区

g 符号针对小object,在初始化数据区

i 非直接引用其他符号的符号

n 调试符号

r 符号在只读数据区

s 符号针对小object,在未初始化数据区

t 符号在代码段

u 符号未定义

标签:__,符号表,符号,xen,per,kallsyms,linux,cpu

来源: https://www.cnblogs.com/aspirs/p/12115705.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值