-
-
[讨论]请问虚拟地址到内存地址如下转换对么。
-
发表于:
2012-12-5 16:40
3448
-
unsigned int PDE;
unsigned int PTE;
if(VirtualAddress>=0x80000000 && VirtualAddress<0xa0000000)
{
PhysicalAddress=VirtualAddress-0x80000000;
}
else
{
PDE=*(unsigned int*)((VirtualAddress>>22)*4+0xC0300000);
if(PDE&0x00000001)
{
PTE=*(unsigned int*)((VirtualAddress>>12)*4+0xC0000000);
if(PTE&0x00000001)
{
PhysicalAddress=((PTE&0xFFFFF000)+(VirtualAddress&0x00000FFF));
}
}
}
在网上看到的这段代码,PTE=*(unsigned int*)((VirtualAddress>>12)*4+0xC0000000);
上面得到的PDE 为什么不用到下面来,不是说虚拟地址的第12位到第21位这10位是页表项的牵引么。
牵引值应该是某一个的页表的牵引,如上代码直接在1024个页表的第一个页表上开始牵引是否正确?
还是说明虚拟地址的第12位到第21位本身就是从页表基址开始牵引的,用系统中第一个页表做基址,并且牵引到第二个,第三个页表内的页表项..。如果是这样的话,那PDE有什么作用。(亦或是系统内部并非这样转换?)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)