通常,内核模块的文件名与模块名称相同。例如,在执行insmod fuse.ko
后,我可以在fuse
中看到/proc/modules
。
但是,重命名内核模块(mv fuse.ko foo.ko
)不会影响插入的模块名称。执行insmod foo.ko
仍会在fuse
中插入/proc/modules
。
是否有任何系统调用或glibc函数可以从内核模块文件中提取模块名称?在上一个示例中,我想从fuse
中提取名称foo.ko
。
答案 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
结构中名称的偏移未标准化。