[英]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.