由GDTR计算GDT的一些相关值

简介: 读张银奎老师的《软件调试》一书,其中一节讲保护模式中分段机制,举了一个例子,用WinDBG观察GDTR和LDTR值,并由此得出一些结论,实例如下:kd> r gdtrgdtr=8003f00kd> r idtridtr=8003f400k...

读张银奎老师的《软件调试》一书,其中一节讲保护模式中分段机制,举了一个例子,用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个表项。

 

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

 

 

目录
相关文章
|
8月前
|
Python
异步计算斐波那契数列大数值项(千万数级)的值
异步计算斐波那契数列大数值项(千万数级)的值
53 0
|
8月前
|
存储 弹性计算 运维
添加两个值
【4月更文挑战第29天】
43 4
|
8月前
|
存储 弹性计算 运维
添加多个值
【4月更文挑战第29天】
36 2
|
8月前
59.已知xxz+yzz=532,求所有可能的x,y,z的值
59.已知xxz+yzz=532,求所有可能的x,y,z的值
51 0
|
8月前
34.设s=1+1/2+1/3+…+1/n,求与8最接近的s的值及与之对应的n值
34.设s=1+1/2+1/3+…+1/n,求与8最接近的s的值及与之对应的n值
136 0
wustojc4010按公式计算y和z的值
wustojc4010按公式计算y和z的值
103 0
|
人工智能 Unix BI
1370:最小函数值(minval)
1370:最小函数值(minval)
|
存储 算法
输出函数f(a,b)=2×a2+b2的最小的100个函数值及相应的两个参数的值
输出函数f(a,b)=2×a2+b2的最小的100个函数值及相应的两个参数的值
107 0
|
机器学习/深度学习 存储
取出网络里面的所有参数,并计算所有参数的二范数
以上代码定义了一个名为calculate_l2_norm的函数,该函数接受一个神经网络模型作为参数,并返回该模型中所有参数的二范数。在函数体内,我们首先创建一个空张量l2_norm_squared,用于存储所有参数的平方和。 然后,通过遍历模型中的所有参数并将它们的平方和累加到l2_norm_squared中来计算所有参数的平方和。最后,我们返回所有参数的二范数。 在主程序中,首先实例化你自己定义的神经网络对象,然后调用calculate_l2_norm函数来计算所有参数的二范数。
237 0