本文为看雪论坛优秀
看雪论坛作者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
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
.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
0000000010 ==0x2
0101010010 ==0x152
000011111000 ==0xF8
!dd 1e0a1000+0x2*4
1e0a1008 2cc5b867 00000000 00000000 00000000
1e0a1018 00000000 00000000 00000000 00000000
1e0a1028 00000000 00000000 00000000 00000000
;查看页表中对应的页表项:
!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
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!
原文始发于微信公众号(看雪学苑):x86-页式管理
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论