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

 

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G00dChina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值