Does kallsyms have all the symbol of kernel functions?

前端 未结 3 1884
小蘑菇
小蘑菇 2021-01-03 06:11

In the Linux kernel I want to probe the kernel function effective_prio(). It defined as static. When I go to search the symbol of it in the

相关标签:
3条回答
  • 2021-01-03 07:03

    kallsyms only lists the symbols exported by EXPORT_SYMBOL and EXPORT_SYMBOL_GPL macros.

    This is done for security. We don'T usually want modules to be able to access for example internal or security functions. Those just go against the idea of making kernel modules as safe as possible, but allowing them to do as much as it is possible.

    0 讨论(0)
  • 2021-01-03 07:06

    There are two possibilities for a function not appearing in /proc/kallsyms:

    1. If the function is marked as static, and the compiler decides to inline the function (with or without the inline keyword)
    2. If a config option or another #define removes a function from being compiled, e.g.:

      #ifdef CONFIG_OPT
      void foo(void) {
      }
      #endif
      

    As far as I know, if a function does not appear in /proc/kallsyms, it is not possible to call or probe it from a module. However, /proc/kallsyms contains all functions of the kernel, not just the ones exported via EXPORT_SYMBOL/EXPORT_SYMBOL_GPL.

    0 讨论(0)
  • 2021-01-03 07:14

    CONFIG_KALLSYMS_ALL=y is also required to see non-static variables, e.g.:

    grep sysctl_sched_nr_migrate /proc/kallsyms
    

    which is defined as:

    const_debug unsigned int sysctl_sched_nr_migrate = 32;
    
    0 讨论(0)
提交回复
热议问题