0

Visual Studio内から完全に実行されるac#Windowsフォームアプリケーションがありますが、.exeから展開して実行するとクラッシュします。バッファオーバーランエラーでクラッシュします...そして、このエラーが私のコード内からスローされていないことは明らかです。代わりに、ウィンドウはある種のバッファオーバーランを検出し、外部からアプリケーションをシャットダウンしている必要があります。それを引き起こしている特定のコード行はないと思います。それは単に断続的に発生します。

バッファオーバーランエラーの考えられる原因と、Visual Studioで実行した場合ではなく、展開されたアプリケーションでのみ発生する理由について、誰かが考えていますか?

よろしくお願いします、ベン

4

2 に答える 2

1

これは、アンマネージ C/C++ コードの誤動作が原因で発生するエラーです。アンマネージ CRT は、スタック フレームに Cookie を格納することにより、コードがスタックにある配列の末尾をオーバーランしていないことを確認します。関数が戻ると、Cookie がまだそこにあるかどうかをチェックします。そうでない場合は、何らかの悪意のあるコードまたは C/C++ コードのバグによってスタック フレームが破壊されたと見なされます。1990 年代後半のほとんどのウイルス感染は、このように機能したと推測できます。

これが 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 に答える