您的位置:首页 > 其它

分页机制_改变地址映射关系

2013-10-07 11:05 267 查看
关键是页目录页表初始化 和PSwitch中的切换

PageDirBase0 equ 200000h

PageTblBase0 equ 201000h

PageDirBase0 equ 210000h

PageTblBase0 equ 211000h

LinearAddrDemo equ 00401000h

ProcFoo equ 00401000h

ProcBar equ 00501000h

ProcPagingDemo equ 00301000h

PagingDemo:



;Code32段PagingDemoProc bar foo复制到FlatC段相应的 ProcFoo ProcBar ProcPagingDemo

;然后

call SetupPaging

;用页目录PageDirBase0和页表PageTblBase0



call SelectorFlatC:ProcPagingDemo

;此时LinearAddrDemo映射物理地址ProcFoo

call PSwitch

;再用页目录PageDirBase1和页表PageTblBase1 让LinearAddrDemo映射物理地址ProcBar

call SelectorFlatC:ProcPagingDemo

;此时call LinearAddrDemo调用了bar

ret

;------------------------------------------------------------------------------------------------------------------------------------------------------------------

PSwitch:

;初始化页目录PageDirBase1和页表PageTblBase1

;然后

;在此假设内存是大于8M的

mov eax,LineaxAddrDemo

shr eax,22 ;页表索引值

mov ebx,4096 ;一个PDE 4k

mul ebx

mov ecx,eax



mov eax,LinearAddrDemo

shr eax,12 ;物理页首地址

and eax,03FFh ;1111111111b(10 bits)

mov ebx,4 ;一个PTE 4

mul ebx

add eax,ecx

add eax,PageTblBase1

mov dword[es:eax],ProcBar |PG_P |PG_USU |PG_RWW

;es指向SelectorFlatRW

;eax<------- PageTblBase1 + 0 + LinearAddrDemo分页后物理地址



mov eax,PageDirBase1

mov cr3,eax

;....................
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: