【发布时间】:2011-10-21 08:31:33
【问题描述】:
您好,非常感谢您的帮助!
在我的 c++ 代码中,我有一些嵌入式汇编代码,并且在 [mov ecx,1AF858h] 行处不断弹出一条错误消息,提示“访问冲突”。它可以在 Windows XP 上完美运行,但不幸的是不能在 Windows 7 上运行。
我不明白是什么导致了问题,我想知道我需要做些什么来解决它。
亲切的问候,大卫
【问题讨论】:
-
这在很大程度上取决于在哪里完成。请显示更多代码。另外,您的代码是否在这两种情况下都编译为 32 位目标?
-
如果是 Visual Studio,则内联程序集仅在 32 位模式下可用。在类中,ECX 寄存器通常保存
this指针。更改可能会产生“有趣”的效果。 -
真的是
[mov ecx,1AF858h]而不是mov ecx,[1AF858h]?因为在后者的情况下,它只是从地址 0x1AF858 读取时的标准访问冲突,与 ecx 无关。但无论如何发布更多代码和/或错误上下文。 -
背景:我正在尝试将汇编代码加载到字节数组中,然后执行它。我已经测试了其他一些东西,看起来 Windows 7 不允许从动态分配的内存块执行任何代码。它是否正确?有什么办法可以解决这个问题?
-
您可以使用
mov ecx, 1234h进行测试,如果这不会产生访问冲突就在那里,那么它就是1AF858h的AV。在这种情况下,您将需要下面关于Virtual*Protect的答案
标签: c++ visual-studio-2010 windows-7 assembly