其他
x86-页式管理
本文为看雪论坛优秀文章
看雪论坛作者ID:SnA1lGo
一
概述
段页式管理中的任务执行流程:
二
简单的段页式模型
mov edx,[0x2002]
;访问内存 ds:0x2002的值然后赋值给edx
;这里的ds前面给出了基地址0x00200000
;所以就是访问虚拟地址为 0x00200000:0x2002的值
;也就是虚拟地址为:0x00202002的值
; 0x00202002可分为:0x00202 002
; 其中高20位内容为0x00202,低12位内容为0x002
; 将高20位的值0x00202 * 4 = 0x00808得到映射表中的索引
; 然后通过映射表得到页物理地址的起始地址0x00007000
; 然后再通过偏移0x002,得到物理地址:0x00007002
三
80386的分页机制(经典分页机制)
页目录表(Page Directory Table,PDT)、页表(Page Table),页目录项(Page Directory Entry PDE)和页表项(Page Table Entry PTE) 总结
PTE结构体:
PDE结构体:
80386 地址变化的具体过程:
mov edx,[0x1050]
;1 页部件首先将段部件送来的32位线性地址截成高10,间的10位和低12位
;高10 位是页目录的索引,中间10 位是页表索引,低12 位则作为页内偏移来用
;2 然后将通过高10位*4得到页目录表的索引和通过CR3寄存器中的页目录表首地址相加得到页目录项
;3 对页目录项的前12位清零得到页表基地址
;4 通过中10位*4得到页表的偏移地址,然后和页表基地址相加得到页表项PTE
;5 对页表项的前12位清零得到页的基地址
;6 通过低12位得到页的偏移地址,然后将偏移地址和页的基地址相加得到物理地址
四
在Windbg中实践
bcdedit /set {current} nx AlwaysOff
bcdedit /set {current} PAE ForceDisable
#include<iostream>
#include<Windows.h>
using namespace std;
int main()
{
char temp[] = "SnailGo";
__asm int 3
return NULL;
}
!process 0 0
PROCESS 8809f860 SessionId: 1 Cid: 0d04 Peb: 7ffd5000 ParentCid: 0d3c
DirBase: 1e0a1000 ObjectTable: a710a1e8 HandleCount: 8.
Image: ApplicationTest1.exe
kd> .formats 009520F8
Evaluate expression:
Hex: 009520f8
Decimal: 9773304
Octal: 00045220370
Binary: 00000000 10010101 00100000 11111000
Chars: .. .
Time: Fri Apr 24 10:48:24 1970
Float: low 1.36953e-038 high 0
Double: 4.82865e-317
得到二进制为:
Binary: 00000000 10010101 00100000 11111000
高10位为: 0000000010 ==0x2
中10位为: 0101010010 ==0x152
低12位为: 000011111000 ==0xF8
kd> !dd 1e0a1000+0x2*4
#1e0a1008 2cc5b867 00000000 00000000 00000000
#1e0a1018 00000000 00000000 00000000 00000000
#1e0a1028 00000000 00000000 00000000 00000000
;查看页表中对应的页表项:
kd> !dd 2cc5b000+0x152*0x4
#2cc5b548 1fd95025 2426a867 3cd1e025 00000000
kd> !db 1fd95000+0xF8
#1fd950f8 53 6e 61 69 6c 47 6f 00-00 00 00 00 00 00 00 00 SnailGo.........
#1fd95108 dc fe 31 62 00 00 00 00-02 00 00 00 5a 00 00 00 ..1b........Z...
#1fd95118 5c 22 00 00 5c 14 00 00-00 00 00 00 dc fe 31 62 \"..\.........1b
#1fd95128 00 00 00 00 0c 00 00 00-14 00 00 00 b8 22 00 00 ............."..
#1fd95138 b8 14 00 00 00 00 00 00-dc fe 31 62 00 00 00 00 ..........1b....
#1fd95148 0d 00 00 00 6c 02 00 00-cc 22 00 00 cc 14 00 00 ....l...."......
#1fd95158 00 00 00 00 dc fe 31 62-00 00 00 00 0e 00 00 00 ......1b........
#1fd95168 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
看雪ID:SnA1lGo
https://bbs.pediy.com/user-home-948248.htm
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!