【发布时间】:2011-09-17 21:22:14
【问题描述】:
可能重复:
Weird MSC 8.0 error: “The value of ESP was not properly saved across a function call…”
我有一个没有任何源代码的 OBJ 文件。我在另一个项目中使用它没有任何问题。现在我正在尝试在另一个项目中使用它。这是我声明它的方式:
extern "C" bool FileCompare(char* file1, char* file2);
我在这样的函数中使用它:
void myFunction() {
//some code
FileCompare(file1, file2); // file1 and 2 are char arrays
}
然后在我的主代码中调用 myFunction:
int main() {
... some code
myFunction()
}
当 myFunction 返回时,我得到“ESP 的值未在函数调用中正确保存。”在 Visual Studio 2010 调试器中。但是,我知道 FileCompares(obj 文件中的函数)可以完成它的工作。当我将其注释掉时,一切正常。我过去使用过这个 OBJ 文件没有任何问题。考虑到我没有 obj 文件的来源,有什么办法可以尝试“修补”这个问题吗?
非常感谢
更多细节:我怀疑代码使用了没有 RET 的 CALL(它是用汇编编写的)。
编辑:我不知道我所说的事情是否有意义,但由于函数损坏了 esp,无论如何都要保存它并在函数返回后恢复它?
【问题讨论】:
-
obj文件也是用VS2010编译的吗?有或没有 SP1?
-
OBJ文件是用masm编写编译的
-
更多细节:我怀疑代码使用 CALL 而没有 RET(它是用汇编编写的)。
-
“代码使用 CALL 而不使用 RET”到底是什么意思?