10

私、および他の数千人の人々は、Microsoft Visual C++ ランタイムによってスローされるエラーを取得しています。

代替テキスト

検索エンジンの利益のために、次のように述べています。

Microsoft Visual C++ Runtime Library

Buffer overrun detected!

Program: %s

A buffer overrun has been detected which has corrupted the program's
internal state. The program cannot safely continue execution and must
now be terminated.

これで、バッファ オーバーランとは何か、なぜそれが悪いことなのかを理解できました。Microsoft が新たに「壊れただけだ」と強調したことを考えると、 MSVCRTの追加のバッファ チェックは便利な機能です。

一方、私は気にしません。プログラムが続行できないのではなく、プログラムが安全に続行できないということです。それは何もないよりはましだからです。私は危険な生活を楽しんでいます。

誰でも何か提案できますか?私は次のようなことを考えていました:

  • MSVCRT が実行を停止しないようにするためのレジストリ キー
  • 以前のオペレーティング システム (Windows 7 より前) との互換性でアプリケーションを実行する
  • アセンブリ マニフェストを実行可能フォルダーに追加して、このオーバーフロー チェックを実行しない古いバージョンの MSVCRT を使用するようにします。
  • オーバーフロー チェックを行わない MSVCRT のコピーのバージョン番号またはダウンロード場所

Microsoft Visual C++ ランタイム ライブラリを作成した会社のサポート サイトを検索してみましたが、どの関数がオーバーフローする可能性があるか、またはオーバーフロー チェックを無効にする方法については言及されていません。

4

2 に答える 2

11

ここにオプションがあります。いいえに設定します。

プロジェクト プロパティ -> 構成プロパティ -> C/C++ -> コード生成 -> バッファ セキュリティ チェック。

これは、/GS (バッファー セキュリティ チェック)コンパイラ オプションに対応します。

戻りアドレスを上書きするいくつかのバッファ オーバーランを検出します。これは、バッファ サイズ制限を適用しないコードを悪用するための一般的な手法です。これは、コンパイルされたコードにセキュリティ チェックを挿入することによって実現されます。

于 2009-11-18T01:26:41.143 に答える
1

これはコードで発生していますか、それとも実際にライブラリで発生していますか? ライブラリにある場合は、エラーを無視したいとおっしゃっていますが、アクセス違反でプロセスがクラッシュした場合はどうしますか?

論理的には同じなので、同じように扱う必要があります。OSではなくCRTがプロセスをクラッシュさせているだけです。

しかし、ライブラリのデバッグ ビルドを使用している場合は、リリース ビルドを使用すると、より良い (?) 結果が得られる可能性があります (ダイアログ ボックスの通知なしでクラッシュするだけかもしれません)。

コード内にある場合は、/GS- オプションを使用してオーバーフロー チェックを無効にすることができます。しかし、本当にバグを修正する必要があります。

于 2009-11-18T01:48:10.060 に答える