0
在x86或x64 Linux中,我试图创建一个内核模块来更改特定的内核页面权限,以允许用户应用程序访问该内存。例如,如果在0xC0001000处有一个可读的内核页面(假设它是3:1分割),我想要更改此页面的用户/主管位,并允许用户应用程序执行此类操作。更改允许用户访问的内核页面权限
int* m = 0xC0001000;
printf("reading kernel memory from user : %08x\n", *m);
以我内核模块,我改变相应的内核存储器页的访问位0×67从到0x63(低位比特111 - > 011)清除管理位。
之后,我使用invdpg指令刷新了虚拟地址0xc0001000的TLB。 我已确认我操作的页面条目的确是相应的。 但是,从用户应用程序访问0xC0001000仍然会导致分段错误。 我在这里错过了重要的东西吗?也许CS段和GDT?或者是不相关的?
一些建议是好的,谢谢你提前:)
谢谢你,但是这不是什么我想......我想让用户应用程序(CPL3)直接访问内核虚拟地址。这是它自己的目标 – daehee
@daehee嗯,'/ dev/kmem'是内核虚拟地址空间,对于用户空间应用程序来说,它需要的只是root权限。 –