使用 Visual Studio 在 C++ 程序中调试缓冲区溢出的工具?

Tool to debug buffer overflows in C++ program with Visual Studio?

很久以前,当我在 Windows 上做 C++ 工作时,有一个用于调试缓冲区溢出的高级诊断工具。它使用特殊的字符模式初始化所有分配的内存区域、堆栈或堆,以便检测缓冲区溢出。它会将自己注入内存管理器来执行此操作,并且它还可以在内存写入后检查所有内存区域以查找损坏。在穷举模式下,它会在每次内存写入后执行此操作,而不仅仅是在特定区域。

当然,它使您的程序 运行 非常慢,但它是查找损坏的内存区域的救命稻草。 Visual Studio 2013 有这样的工具吗?

如果找到这个 SO post 其中一个答案提到了应用程序验证程序,但那是针对 Visual Studio 的真正旧版本:

What C/C++ tools can check for buffer overflows?

有一些有用的工具可用于调试缓冲区溢出和其他内存损坏问题,这些工具既可以随 Visual Studio 开箱即用,也可以从 Microsoft 免费下载:

  • CRT Debug Heap(这可能是您根据描述想到的)。
  • Application Verifier 现在是 Debugging Tools for Windows 的一部分,从该页面底部的 'Standalone Debugging Tools for Windows (WinDbg)' link 下载。堆验证器的 'page heap' 功能是查找堆缓冲区溢出的非常强大的工具。
  • /GS and /sdl 编译器选项。

在 Windows 之外,valgrind 和 clang 的 Address Sanitizer 都是强大的工具。