2012-06-12 63 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.這些結構是否包含任何指針? –

回答