-
Notifications
You must be signed in to change notification settings - Fork 582
/
report.txt
42 lines (35 loc) · 1.76 KB
/
report.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Answers:
1. 前提:知道段选择子(16位),段描述符(64位),页目录表及页表项(32位)的意义
Step1:首先需要获得逻辑地址,LDT的地址:
逻辑地址 0x00003004
全局描述符表物理地址: gdtr:base=0x00005cb8, limit=0x7ff
而局部描述符选择子:ldtr:s=0x0068 二进制0000,0000,0110,1000b 1101即GDT表第14项
bochs:4> xp /2w 0x5cb8 + 13*8
[bochs]:
0x00005d20 <bogus+ 0>: 0x52d40068 0x000082fd
即LDT的物理地址: 0x00fd52d4
Step2:然后需要获得线性地址:
DS段选择子 ds:s=0x0017 即LDT表中第3项
<bochs:5> xp /2w 0xfd52d4 + 2*8
[bochs]:
0x00fd52e4 <bogus+ 0>: 0x00003fff 0x10c0f300
即DS段基地址为 0x10000000
所以线性地址为:0x10003004
Step3:其次获得页目录及页表地址计算得物理地址
CR3内容: CR3=0x00000000
虚拟地址对应页目录第65项,页表第4项,页表内偏移0x004
查询页目录第65项:
<bochs:6> xp /w 64*4
[bochs]:
0x00000100 <bogus+ 0>: 0x00fa5027
页表物理地址为: 0x00fa5000, 查询第4项
<bochs:7> xp /w 0xfa5000 + 3*4
[bochs]:
0x00fa500c <bogus+ 0>: 0x00fa3067
页框物理地址:0x00fa3000 加上偏移0x004
计算得到物理地址: 0x00fa3004
<bochs:8> xp /w 0x00fa3004
[bochs]:
0x00fa3004 <bogus+ 0>: 0x12345678
2.逻辑地址和虚拟地址不变,页目录地址是操作系统放置的, 物理分页变了,所以物理地址也变了。原因是每次进程加载后都有64M的虚拟地址空间,
而且,逻辑地址没有变化。操作系统加载程序时,由于虚拟地址是按nr分配64M,两次运行nr一致,所以虚拟地址没变。