分页机制_改变地址映射关系
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
;....................
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
;....................
相关文章推荐
- 第4节 地址映射机制
- 分页机制之虚拟内存地址到物理内存地址的转换
- WinDbg演示IA-32 CPU下的Windows 分页机制下的地址转换过程(转载)
- 虚拟内存,映射和分页机制
- linux内核:地址映射机制来读取文件内容
- WinDbg演示IA-32 CPU下的Windows 分页机制下的地址转换过程
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- 关于JOS 未对全部内存分页映射之前 物理地址映射问题的思考
- x64 分页机制——虚拟地址到物理地址寻址
- 地址映射 分段分页
- Linux 地址映射全过程(分段机制过程在Linux中不起作用)
- [软件调试学习笔记]WinDbg演示IA-32 CPU下的Windows 分页机制下的地址转换过程
- 32位ubuntu物理地址扩展(PAE)分页机制及如何开启PAE支持4G以上内存(有时grub里面会让你选择)
- Linux 地址映射机制
- Linux_分页管理机制(线性地址转换到物理地址)
- WinDbg演示IA-32 CPU下的Windows 分页机制下的地址转换过程
- 80386的分段机制、分页机制和物理地址的形成
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- 内存管理--三个地址,分页与分段的关系
- Linux_分页管理机制(线性地址转换到物理地址)