要显示符号/proc/kallsyms
,对于模块符号,内核循环遍历以modules
内核变量,并迭代每个模块的符号表。但对于“核心”内核内置符号,它使用了一堆内核变量,如以下函数所示:
static unsigned long kallsyms_sym_address(int idx)
{
if (!IS_ENABLED(CONFIG_KALLSYMS_BASE_RELATIVE))
return kallsyms_addresses[idx];
/* values are unsigned offsets if --absolute-percpu is not in effect */
if (!IS_ENABLED(CONFIG_KALLSYMS_ABSOLUTE_PERCPU))
return kallsyms_relative_base + (u32)kallsyms_offsets[idx];
/* ...otherwise, positive offsets are absolute values */
if (kallsyms_offsets[idx] >= 0)
return kallsyms_offsets[idx];
/* ...and negative offsets are relative to kallsyms_relative_base - 1 */
return kallsyms_relative_base - 1 - kallsyms_offsets[idx];
}
问题是:
- kallsyms_addresses 和 kallsyms_offsets 数组在哪里定义?我尝试在内核源代码中进行 grep 但只找到引用,没有定义。
- 它们在哪里初始化?
- 这些变量和 /boot/System.map.kernel_version 文件之间的关系是什么?我认为它们应该是一致的,但我再次没有找到初始化代码。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)