访问未通过EXPORT_SYMBOL导出的Linux内核符号*

sof*_*eer 5 linux kernel symbols export

我们需要访问net/ipv4/af_inet.c中的内核全局变量,这些变量不是从可加载内核模块显式导出的.我们目前正在使用2.6.18内核.

kallsyms_lookup_name似乎不再可用(未导出)

__symbol_get返回NULL(进一步阅读时,symbol_get/__ symbol_get查看内核和现有模块的仅包含导出符号的符号表,并确保实际加载了导出符号的模块)

无论如何访问未从内核模块导出的符号?

在进行了大量阅读并查看人们提供的答案之后,似乎很难在许多内核版本中找到一种方法,因为kAPI会随着时间的推移而发生显着变化.

Jes*_*mos 5

您可以通过从 /proc/kallsyms 获取它来使用您之前提到的方法,或者只使用 System.map 中给出的地址(这是同一件事),它可能看起来很hackish,但这是我以前看到的方法(从来没有真正需要自己做)。或者您可以构建您自己的自定义内核,您可以在其中实际执行 EXPORT_SYMBOL 您想要导出的任何内容,但这不是可移植的。


Eug*_*ene 5

如果性能不是一个大问题,您可以遍历整个符号列表kallsyms_on_each_symbol()(由内核为GPL模块导出)并检查名称以获得所需的名称.除非没有其他选择,否则我不建议这样做.

如果你想这样,这是我们的一个项目的例子.查看使用情况kallsyms_on_each_symbol()以及代码symbol_walk_callback(),其他部分与此问题无关.