在Visual Studio中调试c++程序缓冲区溢出的工具

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

本文关键字:缓冲区 溢出 工具 程序 c++ Visual Studio 调试      更新时间:2023-10-16

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

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

如果找到这篇SO帖子,其中一个答案提到了应用程序验证器,但这是一个非常旧的Visual Studio版本:

什么C/c++工具可以检查缓冲区溢出?

有一些有用的工具用于调试缓冲区溢出和其他内存损坏问题,这些工具要么是Visual Studio自带的,要么是Microsoft提供的免费下载:

  • CRT调试堆(这可能是你从你的描述中想到的)。
  • 应用程序验证器现在是Windows调试工具的一部分,从该页面底部的"Windows独立调试工具(WinDbg)"链接下载。堆验证器的'页堆'功能是一个非常强大的工具,用于查找堆上的缓冲区溢出。
  • /GS和/sdl编译器选项

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