首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“ESP的值没有在函数调用中正确保存。”问题

“ESP的值没有在函数调用中正确保存。”问题
EN

Stack Overflow用户
提问于 2011-06-18 18:34:55
回答 2查看 11K关注 0票数 2

可能重复:

Weird MSC 8.0 error: “The value of ESP was not properly saved across a function call…”

我有一个OBJ文件,我没有任何原始代码。我在另一个项目中使用过它,没有任何问题。现在我正在尝试在另一个项目中使用它。以下是我声明的方式:

代码语言:javascript
复制
extern "C" bool FileCompare(char* file1, char* file2);

我把它用在这样的函数中:

代码语言:javascript
复制
void myFunction() {
    //some code
    FileCompare(file1, file2); // file1 and 2 are char arrays
}

然后,在我的主要代码中,我称之为myFunction:

代码语言:javascript
复制
int main() {
    ... some code
    myFunction()
}

当myFunction返回时,我得到“ESP的值没有在函数调用中正确保存”。在Visual 2010调试器中。但是,我知道FileCompares ( obj文件中的函数)完成了它的工作。当我把它说出来的时候,一切都很好。我以前使用过这个OBJ文件,没有任何问题。考虑到我没有obj文件的来源,我能做些什么来“修补”这个问题吗?

非常感谢

更多细节:我怀疑代码使用的是没有RET的调用(它是在程序集中编写的)。

编辑:我不知道我说的话对工作方式是否有意义,但是由于函数损坏了,esp是否可以在函数返回后保存和恢复它?

EN

回答 2

Stack Overflow用户

发布于 2011-06-18 19:02:52

这要么是由于FileCompare()中的错误,要么是myFunction()和/或FileCompare()的声明和实现之间的调用约定不匹配。

您可能可以在__cdecl的原型上使用适当的说明符(可能是FileCompare() )来解决问题。或者您可能需要为修复问题的FileCompare()函数创建一个汇编语言包装器(因为您说您不再拥有FileCompare()的源代码)。

在没有FileCompare()源代码的情况下准确地找出问题所在,可能需要在调试器中深入了解程序集。

票数 4
EN

Stack Overflow用户

发布于 2011-06-18 19:09:08

有一次,当我针对旧的头文件编译一个项目时,遇到了一个类似的问题,这个文件与最新的一个缺失的虚拟函数不同。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6398064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档