由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个表项。

 

读书最大的乐趣就在于“为伊消得人憔悴”后的“那人却在灯火阑珊处。”

 

 

上一篇:Apache Thrift的使用


下一篇:01.源码阅读(Fragment--support-fragment-26.0.0-alpha1)