0

我有 ac# Windows Forms 应用程序,它可以在 Visual Studio 中完美运行,但在部署并从 .exe 运行时崩溃。它因缓冲区溢出错误而崩溃......而且很明显,这个错误不是从我的代码中抛出的。相反,windows 必须检测到某种缓冲区溢出并从外部关闭应用程序。我不认为有一个特定的代码行导致它......它只是间歇性地发生。

是否有人对缓冲区溢出错误的可能原因有任何想法,以及为什么它只会发生在已部署的应用程序中而不是从 Visual Studio 运行时发生?

在此先感谢,本

4

2 回答 2

1

这是由行为不端的非托管 C/C++ 代码引起的错误。非托管 CRT 通过在堆栈帧中存储 cookie 来验证代码不会超出位于堆栈上的数组的末尾。当一个函数返回时,它会检查 cookie 是否仍然存在。如果不是,则假定某种恶意代码或 C/C++ 代码中的错误已经破坏了堆栈帧。公平的假设,这就是 90 年代后期大多数病毒感染的工作方式。

这是 C/C++ 代码中的错误的可能性约为 99.999%,机器受到攻击的可能性为 0.001%。您需要找到该 C/C++ 代码并联系编写该代码的程序员以修复错误。如果您不知道去哪里寻找,首先要怀疑任何类型的 ActiveX 控件或 COM 服务器。并将非托管模式下的调试器附加到程序的运行版本,以查看它加载了哪些 DLL。使用 Debug + Windows + Modules 并验证您是否可以考虑所有 DLL。

哦,崩溃细节将有助于本地化源代码。

于 2010-03-17T20:40:25.807 回答
0

你必须更具体。

通常你有一些错误的非托管代码。

于 2010-03-17T18:37:50.073 回答