【发布时间】:2012-04-14 15:25:39
【问题描述】:
我们需要访问 net/ipv4/af_inet.c 中未从可加载内核模块显式导出的内核全局变量。我们目前使用的是 2.6.18 内核。
kallsyms_lookup_name 似乎不再可用(未导出)
__symbol_get 返回 NULL(进一步阅读,symbol_get/__symbol_get 会查看内核和现有模块的符号表,其中仅包含导出的符号,并确保导出符号的模块被实际加载)
是否可以访问不是从内核模块导出的符号?
在大量阅读和查看人们提供的答案后,似乎很难在多个内核版本中找到一种方法,因为 kAPI 会随着时间发生显着变化。
【问题讨论】:
-
objdump path/to/modulename.ko会满足您的需求吗?您必须解码输出以确定模块中的相应偏移量,然后应用它。获取未导出的符号的目的是什么? -
是的,我们实际上可以通过用户空间中的 /proc/kallsyms 获取地址,并可能将其传递给模块,但这似乎有点骇人听闻,所以我想知道是否有更好的东西。我们正在尝试提取部分网络代码并使其成为一个模块,以便我们可以在无需重新启动内核的情况下进行错误修复。
标签: linux export kernel symbols