我想写一个劫持实时时钟(中断8)的LKM(Linux内核模块)。 所以我想把中断设置为我的function,并在某个时候将它发送回旧function。
我试图使用request_irq
函数没有任何成功,可能是因为那里的内核函数不愿意共享中断(我猜这是一个很好的决定)。
我也尝试编辑IDT(中断描述符表),根据我发现的一些页面。 他们没有工作,大多数甚至没有编译,因为他们为内核2.6编写,我正在与3.10工作。
这是一个简单的代码,我只是想让你知道我在做什么。
kpage =__get_free_page( GFP_KERNEL); asm("sidt %0": : "m"(*idtr) : ); memcpy(kpage, idtr, 256*sizeof(kpage)); newidt = (unsigned long long *)(*(unsigned long*)(idtr+1)); newidt[8] = &my_function; asm("lidt %0": "=m"(newidt):);
我所有的尝试都以分段错误结束,在内核崩溃的不利时刻迫使我重新启动(幸运的是我使用虚拟机和快照)。
那么我怎样才能劫持实时中断,这样我的东西呢? (然后将它发送回原来的函数来执行。)
这里有一些很好的代码来改变IDT上的页面错误function。 我不能使它工作,因为它也是为内核2.6编写的。 这个问题也值得研究。
要获得赏金,请发布工作代码,或至less有足够的信息,使其运行。
这可以帮助你: http : //cormander.com/2011/12/how-to-hook-into-hijack-linux-kernel-functions-via-lkm/
你为什么不简单地挂钩一个函数,如你想要的每个x步调用,并执行你所需要的任何东西?