首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在windows 7 64位中读取IVT时出错

在windows 7 64位中读取IVT时出错
EN

Stack Overflow用户
提问于 2015-03-06 15:17:07
回答 1查看 170关注 0票数 0

我想读一下windows 7,64位的IVT,我不确定是否有可能,我有一个在Rootkit阿森纳的代码,这是下一个:

代码语言:javascript
复制
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以保护模式运行,并且该代码需要真正的模式,那么您可以在windows 7上运行该代码。所以我的问题是,我能在windows 7,64位中访问IVT吗?或者,这本书肯定是错的,因为它应该指定该代码不会在windows 7 32或64位中运行。欢迎任何帮助。非常感谢你抽出时间。干杯!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-06 15:23:42

如果不编写内核模式驱动程序,就不能在上这样做,因为您是在长模式下运行(受保护模式的64位扩展)。你要求做的是不可能的在用户模式中

来自雷蒙德·陈的博客链接:

Windows NT在低地址上没有太多的东西。唯一已经存在的是一个映射为零的PAGE_NOACCESS页面,以捕获空指针访问。

基本上,操作系统将一个PAGE_NOACCESS放在IVT将位于的地址,以防止愚蠢的编程错误。尽管如此,这是不可能的,因为您在虚拟地址空间,没有物理访问的物理内存部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28901807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档