我正在编写一个内核模块,我需要劫持/包装一些系统调用。我正在暴力破解 sys_call_table 地址,并且我正在使用 cr0 禁用/启用页面保护。到目前为止一切顺利(一旦完成,我将公开整个代码,所以如果有人愿意,我可以更新这个问题)。
无论如何,我注意到如果我__NR_sys_read
在卸载内核模块时劫持了内核 oops,并且所有 konsoles (KDE) 都会崩溃。请注意,这不会发生在__NR_sys_open
or__NR_sys_write
中。
我想知道为什么会这样。有任何想法吗?
PS:请不要走 KProbes 的方式,我已经知道了,我不可能使用它,因为最终产品应该可以使用,而无需重新编译整个内核。
编辑:(添加信息)
我在卸载之前恢复了原始功能。另外,我创建了两个测试用例,一个_write
只包含一个,一个包含_read
. 一个_write
卸载正常,但一个_read
卸载然后崩溃内核)。
编辑:(源代码)
我现在在家,所以我现在不能发布源代码,但是如果有人想要,我可以在我开始工作后立即发布示例代码。(约 5 小时)