需要 C++ 中堆损坏的示例代码

Need Sample code for heap corruption in C++

我正在尝试学习和理解 VC++ 中的调试堆损坏。

我在 MSDN (https://msdn.microsoft.com/en-us/library/windows/hardware/ff543097(v=vs.85).aspx) 上找到了不错的文章。

谁能给我一个示例代码来重现堆损坏问题。 这样我就可以按照 msdn 文章中提到的步骤进行操作。

这应该会损坏堆:

char *cp = new char[10];
(*(cp - 5))++;

那应该会破坏分配的内存块前面的 header。如果您查看编译器创建的 header 的结构,它还应该让您了解如何创建特定类型的损坏 header 数据。

您可能想尝试禁用优化,因为这是未定义的行为,优化器可能会对 UB 代码做一些有趣的事情。如有疑问,请检查编译器的汇编输出或调试器中的机器代码反汇编,以查看生成了哪些代码。