Sah*_*ngh 5 kernel-module linux-kernel
以下是什么意思(OE+)?
$ sudo cat /proc/modules | grep hello //hello_world is a kernel module created by me.
hello_world 20480 1 - Loading 0xffffffffc0221000 (OE+)
Run Code Online (Sandbox Code Playgroud)
这是我的情况.
我修补了Linux内核函数load_module(),它被调用finit_module(),用于insmod插入内核模块的系统调用.修补程序查找由我(已调用hello_world)安装创建的特定模块,当它执行时,它会阻止调用do_init_module(),而是返回0.do_init_call()负责调用模块的init功能,并将模块状态设置为live(MODULE_STATE_LIVE).
当我读到时/proc/modules,模块状态是Loading,这是预期的.但是我不明白(OE+)输出结尾的含义.这不会显示在任何其他模块上,如以下命令所验证.
$ sudo cat /proc/modules | grep OE
hello_world 20480 1 - Loading 0xffffffffc0221000 (OE+)
Run Code Online (Sandbox Code Playgroud)
我正在使用Linux内核v4.7.3.
更新
所有这些都发生在Qemu虚拟机中.在正在运行的主机上Linux 4.4.0-36-generic (Ubuntu),我得到以下内容.
$ sudo cat /proc/modules | grep OE
vboxpci 24576 0 - Live 0xffffffffc082a000 (OE)
vboxnetadp 28672 0 - Live 0xffffffffc066e000 (OE)
vboxnetflt 28672 0 - Live 0xffffffffc0635000 (OE)
vboxdrv 454656 3 vboxpci,vboxnetadp,vboxnetflt, Live 0xffffffffc0783000 (OE)
sep4_0 671744 0 - Live 0xffffffffc06de000 (OE)
socperf2_0 36864 1 sep4_0, Live 0xffffffffc0660000 (OE)
pax 16384 0 - Live 0xffffffffc05f9000 (OE)
Run Code Online (Sandbox Code Playgroud)
小智 5
O表示已加载了树外模块.
E表示已加载未签名模块.
+表示正在加载模块.
-表示正在卸载模块.
print_modules(),然后是module_flags(),然后是print_tainted()函数的源代码可能有助于弄清楚这些和其他一些标志的含义.看一下上面的评论print_tainted()函数.希望这可以帮助.