为什么32位驱动程序不能在64位上运行

wal*_*wal 7 64-bit x86 x86-64 cpu-architecture

从过去的读数来看,大多数 32位驱动程序似乎无法在64位上运行.

在纯粹的概念层面,我看到一个64位的机器有额外的"房间"使用32个驱动程序时,所以我试图确定为什么最经常,他们将无法正常工作.(我来自用户空间)

我已经阅读了x86-64上的这篇 wiki文章

堆栈上的推送和弹出总是以8字节的步幅进行,指针的宽度为8字节.

我可以看到这可能是一个32位驱动程序可能在64位上失败的原因,因为它发出一个pop(),弹出的数据是驱动程序预期的两倍.

我刚刚提到的可能是完全不合适的,因为我是一个用户空间的人,在这种情况下,或者其他什么是一些实际的例子(代码或外行解释)为什么32位驱动程序在64位运行时失败?

Rod*_*ddy 7

简而言之,您不能在32位指针中存储64位地址.因此,如果您的代码涉及将指针来回传递给操作系统,就像设备驱动程序通常那样,它就不会很好地结束.

驱动程序通常是在物理设备(例如,磁盘)和内存之间移动数据.将要求驱动程序将X磁盘扇区转移到地址为Y的存储器中.

在64位操作系统上,Y将是64位地址,因此您的32位驱动程序无法处理此问题.当然还有一个问题,即传递的指针大小是它预期的两倍,所以如果DID运行它可能会记录错误的内存......