我正在调试一个最终崩溃并显示以下消息之一的软件:
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 对话框,要求我发送错误报告。
我错过了什么?