将 itdr 存储在 x64 上
我试图在我的驱动程序中获取 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 包含 64 位IDT表的基地址。如果有人解释为什么我的输出与 WinDbg 的输出不同,我将不胜感激。
I tried to get idt address in my driver, I made function in asm which returns what idtr contains:
.data
myData dq 0
.code
Function PROC
sidt myData
mov rax, myData
ret
Function ENDP
END
But the address which I get is weird, for example in windbg:
r idtr
idtr=fffff80000b95080
However my driver shows:
idtr = f80000b950800fff
I read that on x64 IDTR contains 64-bit base address of IDT table. I would appreciate if anyone explain why my output is not the same as from WinDbg.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是 Intel 文档中关于 SIDT 指令的说法:
并且:
这意味着您的
myData
变量需要为 10 个字节长,并且指令将限制存储在前 2 个字节中,并将基地址存储在接下来的 8 个字节中。这也解释了为什么您的值在第一个ffff
字节之后与 WinDbg 的值匹配。This is what the Intel docs say about the SIDT instruction:
and:
This means your
myData
variable needs to be 10 bytes long, and the instructions stores the limit in the first 2 bytes and base address in the next 8 bytes. This also explains why your value matches with WinDbg's value after the firstffff
bytes.