如何从* .ko文件中获取默认的内核模块名称?

时间:2017-05-31 06:28:42

标签: linux linux-kernel kernel-module

通常,内核模块的文件名与模块名称相同。例如,在执行insmod fuse.ko后,我可以在fuse中看到/proc/modules

但是,重命名内核模块(mv fuse.ko foo.ko)不会影响插入的模块名称。执行insmod foo.ko仍会在fuse中插入/proc/modules

是否有任何系统调用或glibc函数可以从内核模块文件中提取模块名称?在上一个示例中,我想从fuse中提取名称foo.ko

1 个答案:

答案 0 :(得分:1)

模块的名称包含在 THIS_MODULE 模块对象(类型struct module)中。该对象作为.gnu.linkonce.this_module部分存储在内核模块文件中。

因此,您可以检查该部分的内容并在那里找到模块的名称:

objdump -s -j .gnu.linkonce.this_module foo.ko

readelf -x .gnu.linkonce.this_module foo.ko

模块名称位于偏移12(在32位机器上)或偏移24(在64位机器上)。

modinfo不会打印模块的名称。可能这是因为struct module结构中名称的偏移未标准化。

相关问题