【发布时间】:2020-07-28 16:33:49
【问题描述】:
我从this SO post 看到/proc/kallsyms 应该有动态加载模块的符号以及静态代码,而System.map 只包含静态代码的符号。但是,当我cat /proc/kallsyms 我似乎在内核的文本部分中只有符号(T 和t 标志)时,保存一两个符号,如
0000000000000000 D irq_stack_union
0000000000000000 D __per_cpu_start
另一方面,在 System.map 中,我有来自许多部分的符号 - 基本上来自 /proc/kallsyms 的所有内容,除了加载的内核模块符号。
为了显示这种差异的大小,我使用了wc 命令。
user@debian:~/$ cat /boot/System.map-3.2.0-4-amd64 | wc
51256 153768 2117121
user@debian:~/$ cat /proc/kallsyms | wc
29336 92637 1161409
造成这种差异的原因是什么?我的/proc/kallsyms 文件中所有与数据部分相关的符号在哪里?
编辑:根据要求,这里是kallsyms 配置选项。
user@debian:~$ cat /boot/config-3.2.0-4-amd64 | grep KALLSYMS
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
【问题讨论】:
-
这能回答你的问题吗? System.map file and /proc/kallsyms
-
谢谢,但不是。那是我上面链接的帖子。我知道为什么以及如何
kallsyms和System.map由于该帖子而有所不同,但我的问题反映了与该帖子不同的情况。 -
对此感到抱歉.. 我的猜测是 /proc/kallsyms 源自用于打印 opps 消息的内部数据结构,因此它从来没有理由将符号的地址存储在 .文本部分。内核实际上并没有将非文本符号保存在内存中。
-
使用
sudo cat有什么改变吗?另外,uname -r命令的输出是什么? -
嗨@MarcoBonelli 使用
sudo不会改变任何东西。uname -r的输出是3.2.0-4-amd64。
标签: linux linux-kernel symbols kbuild