将itdr存储在x64上

时间:2010-11-02 01:33:41

标签: c assembly windows-7 device-driver

我试图在我的驱动程序中获取idt地址,我在asm中创建函数,返回idtr包含的内容:

.data
  myData dq 0

.code
Function PROC
  sidt myData
  mov rax, myData
  ret
Function ENDP
END

但我得到的地址很奇怪,例如windbg:

r idtr
idtr=fffff80000b95080

但我的司机显示:

idtr = f80000b950800fff

我在x64上读到IDTR包含IDT表的64位基址。如果有人解释为什么我的输出与WinDbg不同,我将不胜感激。

1 个答案:

答案 0 :(得分:5)

这是英特尔博士对SIDT指令所说的内容:

  

在64位模式下,操作数大小固定为8 + 2字节。该指令存储8字节基址和2字节限制值。

DEST[0:15] <- IDTR(Limit);
DEST[16:79] <- IDTR(Base);

这意味着您的myData变量需要10个字节长,并且指令将限制存储在前2个字节中,基本地址存储在接下来的8个字节中。这也解释了为什么您的值与第一个ffff字节后的WinDbg值匹配。