【发布时间】:2021-02-17 22:32:21
【问题描述】:
我在页表/页目录中找不到地址 0xB8000 的记录。它工作正常,当我将一些符号放入此内存区域时,显示会显示它。
我处于保护模式,并且启用了分页。我正在使用 bochs。
cr0 为 0xe0000011 或 1110 0000 0000 0000 0000 0000 0001 0001b, cr3 为 0x1000
0xB8000等于1011 1000 0000 0000 0000b,所以10111000b是页表索引,等于184,页面目录的索引为0,偏移量为零。
我转到物理内存的 0x1000 并获得第一个(索引 0)项目:
它是 0x2027 或 10 0000 0010 0111b 所以页表的物理地址是 10b 或 2。我需要第 184 个条目的内容,所以我需要转到 184 * 4 + 2 = 738 = 0x2E2,但它是空的:
顺便说一句,我有三个内存描述符(内存从 0x0 到 0xFFFFFFFF):
null:
0
code:
dw 0FFFFh ; limit low
dw 0 ; base low
db 0 ; base middle
db 10011010b ; access
db 11001111b ; granularity
db 0 ; base high
data:
dw 0FFFFh ; limit low (Same as code)
dw 0 ; base low
db 0 ; base middle
db 10010010b ; access
db 11001111b ; granularity
db 0 ; base high
【问题讨论】:
标签: assembly memory-management x86 operating-system page-tables