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

标签 c++ visual-studio-2013 buffer-overflow memory-corruption

<分区>

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

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

如果找到这篇 SO 帖子,其中一个答案提到了 Application Verifier,但那是针对真正旧版本的 Visual Studio:

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

最佳答案

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

  • CRT Debug Heap (这可能是您从描述中想到的)。
  • Application Verifier 现在是 Debugging Tools for Windows 的一部分,从该页面底部的“Windows 独立调试工具 (WinDbg)”链接下载。堆验证器的“页面堆”功能是一种非常强大的工具,可用于查找堆上的缓冲区溢出。
  • /GS/sdl编译器选项。

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

关于c++ - 使用 Visual Studio 在 C++ 程序中调试缓冲区溢出的工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32240453/

相关文章:

c++ - TR1 正则表达式 : capture groups?

C++未知调用约定

sqlite - 在Windows Phone Silverlight 8.1中使用SQLite

c - 缓冲区溢出奇怪的行为

perl - 在 ubuntu 中使用 perl print 语句时 gdb 中的字节顺序被打乱

从 Activity 实例化 IntentService 时 Android 中的 Java 空指针异常

c++ - 使 QGraphicsProxyWidget 可移动和可选择

c++ - 如何在 C++ 中生成范围有限的字符串的哈希码?

visual-studio-2013 - 我的 Visual Studio 2013 有什么问题

javascript - 忽略 typescript 错误 "property does not exist on value of type"