2011-08-06 26 views
-2

您好,非常感謝您的幫助!寫入ecx寄存器會導致Windows 7中的「訪問衝突」

在我的C++代碼中,我有一些嵌入式彙編程序代碼,並且在[mov ecx,1AF858h]錯誤消息不斷彈出,提示「訪問衝突」。它適用於Windows XP,但不幸與Windows 7不兼容。

我不明白是什麼導致了這個問題,我想知道我需要做什麼來解決它。

親切的問候,大衛

+0

這很大程度上取決於在哪裏完成。請再展示一些代碼。另外,在這兩種情況下,您的代碼是否都編譯爲32位目標? –

+3

如果是Visual Studio,則內聯程序集僅在32位模式下可用。在課堂內部,ECX寄存器通常保存'this'指針。改變這可能會產生「有趣的」效果。 –

+1

它真的是'[mov ecx,1AF858h]'而不是'mov ecx,[1AF858h]'?因爲在後者的情況下,它只是從地址0x1AF858讀取時的標準訪問違規,並且與ecx無關。但無論如何發佈更多的錯誤代碼和/或上下文。 – user786653

回答

3

您需要使用VirtualProtect/VirtualProtectEx來標記你的字節數組作爲可執行文件或(寫代碼,然後PAGE_EXECUTE_READ時可能PAGE_READWRITE)使用正確的flagsVirtualAlloc分配它。請注意,它可能需要在頁面基礎上完成。

+0

非常感謝您的幫助!它現在有效。我正在使用的代碼:VirtualProtect(ptr,size,PAGE_EXECUTE_READWRITE和flOldProtect) – user667967

相關問題