天天看點

由GDTR計算GDT的一些相關值

讀張銀奎老師的《軟體調試》一書,其中一節講保護模式中分段機制,舉了一個例子,用WinDBG觀察GDTR和LDTR值,并由此得出一些結論,執行個體如下:

kd> r gdtr

gdtr=8003f00

kd> r idtr

idtr=8003f400

kd>r gdtl

gdtl=000003ff

kd>r idtl

idtl=000007ff

結論是:GDT的邊界是1023,總長度是1024位元組,共有128個表項

       IDT的表長度是2048位元組,共有256項

我們來看看是怎麼計算得來,首先是GDT邊界為gdtl=00003ff(H)=1023(D),總長度即0-1023,則為1024位元組,也即為1K,這個沒問題,我算的來。

一共有128個表項。為什麼會有128項呢?怎麼計算的呢?怎麼想來想不明白。我就用1024÷128=8.我知道2的3次是8,關鍵這8從哪來的呢?代表什麼意思,好難呀,想不明白。

百思不得其姐,錯,是解,沒折了就在那亂翻書,突然翻到段描述通用格式那節才想起來,其結構是64位,也即8個位元組,這個8 是8 個位元組,這樣這個128表項就自然來了。

IDT的7ff(H)即是2047,從0開始共講2048位元組,也即2K,除以8,剛好256個表項。

讀書最大的樂趣就在于“為伊消得人憔悴”後的“那人卻在燈火闌珊處。”