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

时间:2012-03-30 23:17:57

标签: linux export kernel symbols

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

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

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

是否有访问未从内核模块导出的符号?

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

你可以使用你之前提到的方法从/ proc / kallsyms获取它,或者只使用System.map中给出的地址(这是相同的东西),它可能看起来像hackish但这就是我见过的之前完成过(从来没有真正做过)。无论是这个还是你可以构建自己的自定义内核,你实际上在它想要导出的任何内容上执行EXPORT_SYMBOL但是这不是可移植的。