3

我一直在努力解决这个问题很长时间了,但我一无所获。

这是我想要做的:如果 IDTR 中包含的值为 0x3A000,则中断向量编号 3 位于保护模式下的哪个物理地址?

我想找到一个公式来帮助我计算中断向量#3 偏移量的每个字节的物理地址,以及中断向量#3 段的每个字节的物理地址。

我一直在寻找互联网,并没有关于 IDTR 如何计算这个的可靠解释,我真的很好奇。

我也很好奇如何为实模式找到相同的物理地址......

如果有人可以帮助我找到解决此类问题的通用公式,那将是一个爆炸!

4

2 回答 2

5

我找到了答案。Tnx 到 Jester 和链接。:D

下图显示了 IDTR(中断描述符表寄存器)和 IDT(中断描述符表)的关系。(参考:英特尔手册):

在此处输入图像描述

这里还有一张图片,显示了 IDT 中的条目的外观(参考:英特尔手册):

在此处输入图像描述

IDT(中断描述表)的基地址(IDT 开始的地址)由位 16 至 47、16 和 47 (含)给出。要获得向量#3 的地址,必须将前 2 个条目的大小添加到基地址。要找到偏移量和段选择器的位所在的地址,需要找到向量的地址,然后根据第二张图片添加字节,也就是说移动到 IDT 的条目内。

“IDT 的基地址应在 8 字节边界上对齐,以最大限度地提高缓存行填充的性能。限制值以字节表示,并与基地址相加以获得最后一个有效字节的地址。一个限制值 0 会导致正好 1 个有效字节。因为 IDT 条目总是 8 个字节长,所以限制应该总是小于 8 的整数倍(即 8N – 1)。IDT 可以驻留在线性地址中的任何位置空间。如图 6-1 所示,处理器使用 IDTR 寄存器定位 IDT。该寄存器保存 IDT 的 32 位基地址和 16 位限制。- (参考:英特尔手册)

因此,应该按照手册中的说明对齐表格以获得更好的性能。出于教育目的,我将解释如何在 IDTR 包含 3A000h 时找到偏移字节和段字节的物理地址。

程序:

首先我将 3A000h 写成二进制格式,这样使用图片更容易理解数字。

所以 3A000h 变为: 0000 0000 0000 0000 0000 0000 0000 0011 1010 0000 0000 0000 注意:它是一个 48 位数字,因为 IDTR 是 48 位长。

基地址是从第 16 位开始到第 47 位结束的数字。所以:

在此处输入图像描述

基地址 = 0000 0000 0000 0000 0000 0000 0000 0011 即 3h。

所以第一个条目位于物理地址 3。

要获得第三个条目,需要在它之前添加 2 个条目的大小,因此第三个条目的地址是:

3+2*8=19=13h

这 2 个条目乘以 8,因为一个条目是 8 个字节长。

现在要获取偏移字节的物理地址,我们只需要查看图 6.2 并看到条目如下所示:

在此处输入图像描述

所以从图片中读取

段选择器的物理地址是:

19+2 和 19+2+1

或者

13h+2h 和 13h+2h+1h

偏移字节的物理地址是(假设是中断或陷阱门):19, 19+1, 19+6, 19+7

或者

13h, 13h+1, 13h+6h, 13h+7h


解决此类问题的一般程序:

BaseAddress=IDTR/(2^16) -> 整数除法

限制=IDTR%(2^16)

VectorPhysicalAddress=BaseAddress+(VectorNumber-1)*8

段选择器字节的物理地址为:VectorPhysicalAddress+2 和 VectorPhysicalAddress+3

偏移字节的物理地址为:VectorPhysicalAddress、VectorPhyscialAddress+1、VectorPhysicalAddress+6​​、VectorPhysicalAddress+7

于 2013-01-28T23:33:35.333 回答
0

我有点困惑为什么您不阅读英特尔手册而不是“环顾互联网”。当然,上述手册也可以在互联网上找到

如果您愿意阅读Intel® 64 和 IA-32 架构软件开发人员手册第 3A 卷:系统编程指南,第 1部分中的第 6.10 节中断描述符表 (IDT),您将看到 IDTR 包含一个线性基地址(位 16- 47)和一个限制(位 0-15)。另请注意,手册中说限制应始终小于 8 的整数倍,因此,您的示例无效(也不是特别合理的基地址)。要获取物理地址,您必须通过正常的分页机制(如果启用)。每个中断的处理程序由表中的 8 字节描述符定义。更多详细信息请参见手册。0x3a0003

在实模式下,中断向量是从物理地址 0 开始的 4 字节远指针。

于 2013-01-27T22:36:03.360 回答