我试图在我的驱动程序中获取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不同,我将不胜感激。
答案 0 :(得分:5)
这是英特尔博士对SIDT指令所说的内容:
在64位模式下,操作数大小固定为8 + 2字节。该指令存储8字节基址和2字节限制值。
和
DEST[0:15] <- IDTR(Limit);
DEST[16:79] <- IDTR(Base);
这意味着您的myData
变量需要10个字节长,并且指令将限制存储在前2个字节中,基本地址存储在接下来的8个字节中。这也解释了为什么您的值与第一个ffff
字节后的WinDbg值匹配。