2010-03-17 69 views
0

我有一个完全从Visual Studio中运行的c#Windows窗体应用程序,但是当它从.exe部署并运行时崩溃。它崩溃与一个缓冲区溢出错误...并很清楚,这个错误不是从我的代码中抛出。相反,Windows必须检测某种缓冲区溢出并从外部关闭应用程序。我不认为有一个特定的代码行导致它..它只是间歇性地发生。C#应用程序在已部署的(.exe)版本中崩溃,但在Visual Studio中没有缓冲区溢出

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

由于提前, 本

+0

你试过不同的电脑吗? – Luiscencio 2010-03-17 18:25:32

+0

你能提供确切的错误吗? – 2010-03-17 18:26:11

+0

谢谢。是的,它发生在多台PC上。我只是在下面的评论中发布了错误。 – Ben 2010-03-17 19:05:02

回答

0

你必须要更加具体。

Usualy你有一些越野车非托管代码。

+0

确切的错误是: 缓冲区溢出发生在MyApplication.exe中,已经破坏了程序的内部状态。按Break键调试程序或继续终止程序。 很难提供代码......我无法确定它在哪里崩溃!我正在将日志语句添加到几乎每行代码的过程中,但到目前为止,我仍未检测到模式。 – Ben 2010-03-17 19:04:25

+0

为什么不按照错误状态“Press Break调试程序”?为什么不尝试在Visual Studio中将应用程序附加到调试器(当然,您的应用程序应该在调试模式下运行而不是在发布模式下)?你使用不安全的代码块吗? – 2010-03-17 19:58:31

1

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

这是C/C++代码中的一个错误,机器受到攻击的可能性为0.001%,可能性约为99.999%。你需要找到这个C/C++代码,并掌握编写它的程序员来修复这个bug。如果你不知道在哪里寻找,从怀疑任何一种ActiveX控件或COM服务器开始。并将非托管模式下的调试器附加到程序的正在运行的版本上,以查看它已加载的DLL。使用Debug + Windows +模块并验证您是否可以解释所有DLL。

哦,并且崩溃细节将被验证有助于本地化源代码。