visual-studio-2010 - 发布代码必须依赖于通过函数调用保留的 ebx 吗?

标签 visual-studio-2010 visual-c++ inline-assembly

我正在为一个应用程序编写一个 DLL 附加组件,该应用程序内部有大量用汇编语言编写的部分。我正在混合托管 C++、非托管 C++ 和内联汇编。

我刚刚花了几个小时调试一个问题,结果发现在调用主应用程序期间没有保留 ebx。仅当代码在 Release模式下且在调试器外部运行时,才会发生该错误。在调试器中发布代码不会出现此问题。

我已经关闭了可以为发布版本找到的所有优化,但它仍然依赖于 ebx。我添加了 push/pop ebx 作为解决方法,但这个错误肯定会再次出现。 :-(

是否可以告诉编译器 ebx 在函数调用期间可能会更改?

最佳答案

错误出现在函数的原型(prototype)中,该函数报告它符合调用约定,但实际上并未遵守调用约定的寄存器保存规则。您需要将对有缺陷的函数的调用包装在您自己的函数中,使其符合要求(通过保留寄存器),并让每个人都调用包装器。 #pragma deprecated 将让您强制执行此策略。

关于visual-studio-2010 - 发布代码必须依赖于通过函数调用保留的 ebx 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8056753/

相关文章:

c# - VS2010 DLL 不更新

visual-studio-2010 - 我可以在同一台计算机上安装两个不同版本的 Visual Studio 吗?

c# - 有没有办法让编译器根据项目的目录结构确定我的类的命名空间?

visual-c++ - OpenCV 特定物体检测

c++ - 具有可变数量类型的模板

visual-studio-2008 - 有谁知道导致此错误的原因?带有 VisualAssert 的 VC++

x86 输入/输出端口 I/O 的 C 内联汇编具有操作数大小不匹配

visual-studio-2010 - Visual Studio 2010 WebDev WebServer (Cassini) 64 位兼容吗?

optimization - GNU内联汇编优化

performance - x86 Assembly pushad/popad,它有多快?