Linux / proc / kallsyms文件,内核将核心符号列表保存在哪里?

要在/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];
}

问题是:

  1. 在哪里定义kallsyms_addresses和kallsyms_offsets数组?我试图在内核源代码中使用grep,但是只找到引用,没有定义。
  2. 它们在哪里初始化?
  3. 这些变量和/boot/System.map.kernel_version文件之间是什么关系?我认为它们应该是一致的,但是我仍然没有找到初始化代码。
scar2822226 回答:Linux / proc / kallsyms文件,内核将核心符号列表保存在哪里?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2990091.html

大家都在问