繁体   English   中英

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

[英]How to get default kernel module name from *.ko files?

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

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

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

模块的名称包含在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结构中名称的偏移量未标准化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM