【发布时间】:2011-10-13 10:05:15
【问题描述】:
我正在尝试编译一个与 Visual C++ 6.0 的编译器一起工作的程序。 现在,我正在使用 Visual Studio 2010 的编译器对其进行编译。它可以编译,但我的程序在分配变量时崩溃:
sapHigh = ctx->saphigh;
在汇编代码中(使用 Visual Studio 调试器),这条指令被分解为:
00410DF3 mov eax,dword ptr [ctx]
00410DF6 mov ecx,dword ptr [eax+20h]
00410DF9 mov dword ptr [sapHigh],ecx
指令“mov eax, dword ptr[ctx]”在eax中返回0x00000000,程序崩溃。但是调试器可以看到 ctx 指针的真实值是“0x0172287a”。如果我将 eax 寄存器的值更改为实际值“0x0172287a”,程序仍然可以正常工作,直到下一次赋值。
有人知道为什么这条指令不起作用吗?这是编译选项的问题吗?
感谢您的帮助。
【问题讨论】:
-
您的程序是否使用了任何为与旧应用程序一起工作而编译的外部库或 dll?我记得在用 VC6 和 Visual Studio 2003 编译的 dll 之间使用 stl 字符串时,我们遇到了一些类似的问题。
-
您是否尝试在
ctx位置设置断点? -
能贴出程序的源码吗?从这些 sn-ps 中很难猜到...
-
@NotJarvis 通常,所有外部库和 dll 都使用新编译器进行编译。
-
@RedX 很遗憾,我无法发布程序的源代码,抱歉...
标签: c++ visual-studio visual-studio-2010 assembly