在linux中劫持实时时钟

Ram*_*hil 16 c linux interrupt kernel-module

我想编写一个劫持实时时钟(中断8)的LKM(Linux内核模块).所以我希望将中断设置为我的函数,并在某些时候将其发送回旧函数.

我试图使用该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):);
Run Code Online (Sandbox Code Playgroud)

我的所有尝试都是在分段故障的好时候结束,并且在内核崩溃的困难时期迫使我重新启动(幸运的是我使用虚拟机和快照).

那么我怎么能劫持实时中断所以它能完成我的工作呢?(然后将其发送回原始函数以执行.)

是一些很好的代码来改变IDT上的pagefault函数.我无法使它工作,因为它也是为内核2.6编写的.这个问题也值得研究.

要获得赏金,请发布工作代码,或者至少提供足够的信息以使其运行.

Tho*_*rcq 2

这可以帮助您:http://cormander.com/2011/12/how-to-hook-into-hijack-linux-kernel-functions-via-lkm/

为什么不简单地挂接一个函数,按照您想要的方式每 x 步调用一次并执行您需要的内容?