kallsyms是否具有内核函数的所有符号?

时间:2013-11-25 15:18:46

标签: c linux kernel

在Linux内核中,我想探测内核函数effective_prio()。它定义为static。 当我在 kallsyms 中搜索它的符号时,我无法找到它。 kallsyms 是否具有内核函数的所有符号?如果没有,哪些符号不包括在内?

3 个答案:

答案 0 :(得分:4)

/proc/kallsyms中没有出现函数的可能性有两种:

  1. 如果函数标记为static,并且编译器决定内联函数(带或不带inline关键字)
  2. 如果配置选项或其他#define删除了编译的函数,例如:

    #ifdef CONFIG_OPT
    void foo(void) {
    }
    #endif
    
  3. 据我所知,如果/proc/kallsyms中没有出现函数,则无法从模块调用或探测它。 但是,/proc/kallsyms包含内核的所有功能,而不仅仅是通过EXPORT_SYMBOL / EXPORT_SYMBOL_GPL导出的功能。

答案 1 :(得分:1)

str也需要查看非静态变量,例如:

CONFIG_KALLSYMS_ALL=y

定义为:

grep sysctl_sched_nr_migrate /proc/kallsyms

答案 2 :(得分:-1)

kallsyms仅列出EXPORT_SYMBOL和EXPORT_SYMBOL_GPL宏导出的符号。

这是为了安全起见。我们通常不希望模块能够访问例如内部或安全功能。那些只是反对让内核模块尽可能安全的想法,但允许它们尽可能多地做。