2017-05-31 71 views
0

通常,内核模块的文件名与模块名称相同。例如,在做insmod fuse.ko后,我可以看到fuse插入/proc/modules如何从* .ko文件获取默认的内核模块名称?

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

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

回答

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结构中名称的偏移不是标准化的。

+0

谢谢!这对我很有帮助:) –

+1

顺便说一句,我写了一个小工具来打印出模块名称:https://github.com/johnlinp/kernel-module-name/ –