简体   繁体   中英

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

Usually, the filename of a kernel module is the same as the module name. For example, after doing insmod fuse.ko , I can see fuse inserted in /proc/modules .

However, renaming the kernel module ( mv fuse.ko foo.ko ) doesn't affect the inserted module name. Doing insmod foo.ko still inserts fuse in /proc/modules .

Is there any system call or glibc function that can extract the module name from a kernel module file? In the previous example, I want to extract the name fuse from foo.ko .

Name of the module is contained in THIS_MODULE module object (of type struct module ). This object is stored in the kernel module file as a section .gnu.linkonce.this_module .

So, you may examine content of that section and find module's name there:

objdump -s -j .gnu.linkonce.this_module foo.ko

or

readelf -x .gnu.linkonce.this_module foo.ko

Module name is located at offset 12 (on 32-bit machine) or at offset 24 (on 64-bit machine).


modinfo doesn't print module's name. Probably, this is because offset of the name in the struct module structure is not standardized.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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