gpt4 book ai didi

x86 - 为什么 32 位驱动程序在 64 位上不起作用

转载 作者:行者123 更新时间:2023-12-04 10:21:09 26 4
gpt4 key购买 nike

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

在纯粹的概念层面上,我认为 64 位机器在使用 32 位驱动程序时具有额外的“空间”,因此我试图确定为什么大多数情况下它们不起作用。 (我来自用户空间)

我已阅读 this关于 x86-64 的 wiki 文章指出

Pushes and pops on the stack are always in 8-byte strides, and pointers are 8 bytes wide.



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

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

最佳答案

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

驱动程序通常用于在物理设备(例如磁盘)和内存之间移动数据。驱动程序将被要求将 X 个磁盘扇区传输到地址 Y 的内存中。

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

关于x86 - 为什么 32 位驱动程序在 64 位上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6307859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com