c - 尝试在 Windows 7 64 位中读取 IVT 时出错

标签 c windows assembly intel processor

我想在 Windows 7 64 位中读取 IVT,我不确定是否可行,我在 Rootkit Arsenal 中有一个代码,就是下一个:

int main(int argc, char** argv) {

     unsigned short csAddr;
     unsigned short ipAddr;
     short address;
     unsigned short vector;

     vector = 0x0;

     printf ("\n---Dumping IVT from bottom up---\n");
     printf ("Vector\tAddress\t\n");

     for (
             address = IDT_001_ADDR; 
             address <= IDT_255_ADDR;
             address = address+IDT_VECTOR_SZ, vector++
         ) 
         {
     printf ("%03d\t$08p\t",vector,address);
     asm ("PUSH ES;");
     asm ("MOV AX,0;");
     asm ("MOV ES,AX;");
     asm ("MOV EBX,0;");
     asm ("MOV BX,%0"::"r"(address):);
     asm ("MOV AX,ES:[BX]");
     asm ("MOV %0,AX":"=r"(ipAddr)::);  
     asm ("INC BX;");
     asm ("INC BX;");
     asm ("MOV AX,ES:[BX]");
     asm ("MOV %0,AX":"=r"(csAddr):);
     asm ("POP ES");

     printf ("[CS:IP]=[%04X,%04X]\n",csAddr,ipAddr);
     }
     return 0;
}

我使用的是 Windows 7 64 位。我想了解为什么这段代码不起作用。我收到“访问冲突读取位置 0x00000000”错误,这对我来说很有意义,因为 Windows 使用分页来访问内存所以我不知道为什么书上它告诉你可以在 Windows 7 上运行该代码,如果 Windows 运行在保护模式下,该代码需要实模式。所以我的问题是,我可以在 64 位 Windows 7 中访问 IVT 吗?或者肯定,这本书是错误的,因为它应该指定该代码不会在 windows 7 32 或 64 位中运行。欢迎任何帮助。非常感谢您的宝贵时间。干杯! :D

最佳答案

NO 你不能在没有编写内核模式驱动程序的情况下在 Windows 上执行此操作,因为你在长模式(保护模式的 64 位扩展)下运行。你要求做的是不可能的in user mode

来自 Raymond Chen 的链接博客文章:

Windows NT didn't have a lot of stuff at low addresses. The only thing that was already there was a PAGE_NOACCESS page mapped at zero in order to catch null pointer accesses.

基本上,操作系统会在 IVT 所在的地址处放置一个 PAGE_NOACCESS 以防止愚蠢的编程错误。这就是说这是不可能的,因为您处于虚拟地址空间中并且无法物理访问该部分物理内存。

关于c - 尝试在 Windows 7 64 位中读取 IVT 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28901807/

相关文章:

assembly - x86 程序集中是否有任何暂停/ sleep 或事件

c - 我不明白为什么 Person 类型不兼容?我需要做什么来编译它?

在 Windows (C/C++) 上检查应用程序二进制文件的位数

c - 如何使用 NaN 处理无效数据的可能性

c - 如何在 Lua 中访问 C 指针

android - FLutter - 尝试运行应用程序时出错

c++ - "call failed and did not execute"

performance - 为什么 fp 除法运算比倒数运算加乘法运算慢

windows - 窗口启动时如何运行批处理文件? (登录问题)

assembly - SBCL 优化 : Can we compile an efficient population count for bit-vectors?