次のいずれかのメッセージで最終的にクラッシュするソフトウェアをデバッグしています。
1. DAMAGE: after normal block (#24729280) at 0x00D710E0
2. Debug Assertion Failed
Program: D:\Soft\Test.exe
File: dbgheap.c
Line: 1017
Expression: _BLOCK_TYPE_IS_VALID(phead->nBlockUse)
このソフトウェアは非常に古いものですが、現在変更することはできません。Visual C++ 6.0 で書かれています。ある種のバッファ オーバーフローであると推測しているため、どこで発生しているかを検出する方法を見つけようとしています。
PageHeap (私が欲しいものを教えてくれるようです) とGFlagsに関する情報を見つけましたが、それを機能させることができないようです。
テストプログラムを作成しました:
char* test;
test = new char[5];
test[5] = 'a';
delete[] test;
エラーが発生します:
DAMAGE: after normal block (#55) at 0x1671920
次に、次のコマンドを実行して PageHeap をアタッチしようとしました。
gflags.exe /p /enable MemoryTest.exe /full
その後、(Visual C++ 6.0 インターフェイスと Windows エクスプローラーの両方を使用して) 再実行すると、同じエラーが発生しました。
次に、リリース バージョンをコンパイルして、Visual C++ 6.0 インターフェイスを介して実行すると、次のエラーが発生しました。
User breakpoint called from code at 0x7c90120e
そして、Windows エクスプローラーから、エラー レポートを送信するように求める Windows ダイアログが表示されました。
私は何が欠けていますか?