我试图在Linux内核驱动程序中修改运行时的用户空间应用程序代码。
给出以下代码片段:
writeCR3(process_cr3);
writeCR0(cr0 & ~X86_CR0_WP); // to allow writing to RO pages
*(char*)someUserAddress = 0x90; // just an example, nop
writeCR0(cr0 | X86_CR0_WP); // restore write protection
它在运行时成功修改了用户应用程序代码,但由于某种原因,它自己的文件也会更改(如果我在修改后的可执行文件上使用' OBJDUMP' READELF'写完之后我真的可以看到它已被修改了 - 似乎它也被写入了ext4文件系统。
我不希望这样。我希望只在内存中修改代码。 我如何实现这一目标?为什么文件系统实际上也会修改它自己的文件?