2017-05-31 58 views
0

通常,內核模塊的文件名與模塊名稱相同。例如,在做insmod fuse.ko後,我可以看到fuse插入/proc/modules如何從* .ko文件獲取默認的內核模塊名稱?

但是,重命名內核模塊(mv fuse.ko foo.ko)不會影響插入的模塊名稱。做insmod foo.ko仍插入fuse/proc/modules

是否有任何系統調用或glibc函數可以從內核模塊文件中提取模塊名稱?在前面的示例中,我想從foo.ko中提取名稱fuse

回答

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結構中名稱的偏移不是標準化的。

+0

謝謝!這對我很有幫助:) –

+1

順便說一句,我寫了一個小工具來打印出模塊名稱:https://github.com/johnlinp/kernel-module-name/ –

相關問題