2014-01-17 78 views
0

我正在使用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!

任何人都可以幫我指出我錯在哪裏嗎?

非常感謝你提前!

回答

1

0008表示第一段,而不是第8段。 因此,0x0000ffff 0x10cf9a00意味着段基址= 0x10000000,所以0008:0xf010002e重疊到0x0010002e。

編輯:(回答評語)

最低位0和段選擇的1用作權限級別(環)選擇器,位2 - GDT和LDT之間選擇,所有的其它位用作相關描述符表的偏移量。因此,0x00080x000b意味着0x0008在GDT偏移權限級別0..3

指針的解釋:Intel Software Developer Manual,第3卷合併成本小於合併

+0

@qwm嗨,爲什麼0008是指第一段?請你稍微解釋一下,或給我一個解釋指針?非常感謝! – Mike

+0

也許0008意味着8B抵消?那麼它是指GDT的第一個入口? – Mike

+1

對不起,我很忙。答案已更新。 – qwm