我正在使用bochs来调试MIT的JOS。我很困惑,在Bochs的输出地址:从逻辑地址到机器地址的错误翻译,GDT
(0) [0x0010002e] 0008:0xf010002e (unk. ctxt): mov ebp, 0x00000000 ; bd00000000
我试图找出0008:0xf010002e
是如何转移到[0x0010002e]
。
基于逻辑地址的转换。到线性地址,我想我应该使用GDT的第8个条目的基地址加上偏移量0xf010002e
。
但是,我得到了GDT的内容如下:
<bochs:6> x /16wx 0x0010f000
[bochs]:
0x0010f000 <bogus+ 0>: 0x00000000 0x00000000 0x0000ffff 0x10cf9a00
0x0010f010 <bogus+ 16>: 0x0000ffff 0x10cf9300 0xf0000017 0x00000010
0x0010f020 <bogus+ 32>: 0x32311b00 0x36353433 0x30393837 0x09083d2d
0x0010f030 <bogus+ 48>: 0x72657771 0x69757974 0x5d5b706f 0x7361000a
第八项是:
0x69757974 0x5d5b706f
在Fig 5-3基于条目的格式,基地址为:0x730a8d5b
。但是,0x730a8d5b + 0xf010002e不是0x0010002e!
任何人都可以帮我指出我错在哪里吗?
非常感谢你提前!
@qwm嗨,为什么0008是指第一段?请你稍微解释一下,或给我一个解释指针?非常感谢! – Mike
也许0008意味着8B抵消?那么它是指GDT的第一个入口? – Mike
对不起,我很忙。答案已更新。 – qwm