今天写了个程序,R3和R0共享一块内存,结果出现了点问题,
程序是这样的:
R3用malloc分配一块大小为0x190的内存,然后把地址p1发给R0的驱动,
驱动得到地址后通过MmGetPhysicalAddress和MmMapIoSpace映射它,得到指针p2,
结果最终使用的时候发现,p1和p2中内容并不完全一样,我仔细看了一下,只有前面0x68字节的内容是一样的,后面的内容完全不一样。
我百思不得其解,结果后面发现MmGetPhysicalAddress(p1)得到的值是0x1A62BF98,而0x1A62BF98 + 0x68 = 0x1A62C000,刚好是一页。。
那么,是否可以这么认为,malloc分配的内存,其虚拟内存是连续的,但是这块虚拟内存对应的物理内存却分别指向了两个页面,其中前0x68字节是在0x1A62B000这页中,剩下的0x128字节则在另一页中,这两页并不是连续的。
而驱动中MmMapIoSpace(0x1A62BF98,0x190,)映射的是从0x1A62BF98到0x1A62BF98+0x190的这块物理地址?
如果是这样,那么如何保证申请的内存是在同一物理页中呢(需要分配的内存大小小于一页)?,如果分配的内存大于一页,怎么办呢?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课