我正在做一个内核模式驱动程序,在 64 位上运行代码时遇到了一些错误。
该代码在 32 位上运行良好,但是当我在 amd64 中构建/运行时,我得到了奇怪的结果。我阅读了一些关于 64 位指针和寻址与 32 位与 16 位(在 win32 中)的内容,我确信我遗漏了一些关于 64 位架构中指针基础知识的内容。
这是在 32 位中运行良好的 C 代码。
ncImageLoadEventSettings.buff
是一个char*
并且ncILHead->count
只是一个int。
// Calculate offset
pnt = (void*)(ncImageLoadEventSettings.buff + sizeof(struct NC_IL_HEAD) + (ncILHead->count * sizeof(struct NC_IL_INFO)));
此代码计算将结构对象写入缓冲区的地址(从 开始.buff
),这在 32 位模式下工作得非常好。
需要注意的是,读取这个缓冲区的程序是32位的。我想我在某处读到 64 位模式下的结构与 32 位模式下的结构大小不同。
32 位阅读器程序可以很好地读取缓冲区的一些内容,而大多数条目都是垃圾。
这是计算地址的正确方法,还是读取该缓冲区的 64 位和 32 位读取器应用程序可能存在问题?