如何从 *.ko 文件中获取默认内核模块名称?
How to get default kernel module name from *.ko files?
通常,内核模块的文件名与模块名相同。例如,在执行 insmod fuse.ko
之后,我可以看到 fuse
插入 /proc/modules
。
但是,重命名内核模块 (mv fuse.ko foo.ko
) 不会影响插入的模块名称。执行 insmod foo.ko
仍然会在 /proc/modules
.
中插入 fuse
是否有任何系统调用或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
结构中名称的偏移量未标准化。
通常,内核模块的文件名与模块名相同。例如,在执行 insmod fuse.ko
之后,我可以看到 fuse
插入 /proc/modules
。
但是,重命名内核模块 (mv fuse.ko foo.ko
) 不会影响插入的模块名称。执行 insmod foo.ko
仍然会在 /proc/modules
.
fuse
是否有任何系统调用或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
结构中名称的偏移量未标准化。