2012-06-12 62 views
2

我在做一个内核模式驱动程序,并且在64位上运行代码时遇到了一点问题。C和64位指针计算

代码在32位上运行正常,但是当我在amd64中编译/运行时,我得到了奇怪的结果。我读了一些关于64位指针和32位和16位(在win32中)的地址,我确信我错过了关于64位体系结构中指针基本原理的东西。

下面是在32位工作得很好的C代码。 ncImageLoadEventSettings.buff是一个char*ncILHead->count只是一个整数。

// 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位读取器应用程序可能存在问题?

+0

与MSVC没有对齐差异,默认打包为8.这些结构是否包含任何指针? –

回答