在Visual Studio中调试c++程序缓冲区溢出的工具
Tool to debug buffer overflows in C++ program with Visual Studio?
很久以前,当我在Windows上做c++工作时,有一个高级的诊断工具用于调试缓冲区溢出。它用一种特殊的字符模式初始化所有分配的内存区域(堆栈或堆),以便检测缓冲区溢出。它将自身注入到内存管理器中来做这件事,这样它就可以在内存写入后检查所有内存区域以查找损坏。在穷举模式下,它将在每次写入内存之后执行此操作,而不仅仅是在特定区域。
它当然会使你的程序运行得非常慢,但它是查找损坏内存区域的救星。Visual Studio 2013有这样的工具吗?
如果找到这篇SO帖子,其中一个答案提到了应用程序验证器,但这是一个非常旧的Visual Studio版本:
什么C/c++工具可以检查缓冲区溢出?
有一些有用的工具用于调试缓冲区溢出和其他内存损坏问题,这些工具要么是Visual Studio自带的,要么是Microsoft提供的免费下载:
- CRT调试堆(这可能是你从你的描述中想到的)。
- 应用程序验证器现在是Windows调试工具的一部分,从该页面底部的"Windows独立调试工具(WinDbg)"链接下载。堆验证器的'页堆'功能是一个非常强大的工具,用于查找堆上的缓冲区溢出。
- /GS和/sdl编译器选项
在Windows之外,valgrind和clang的Address Sanitizer都是强大的工具。
相关文章:
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 使用 strcat 获取缓冲区溢出错误
- LeetCode 1:两和 - 地址清理器:堆缓冲区溢出地址
- 使用向量的缓冲区溢出
- 重新增长阵列时出错:写入时缓冲区溢出
- Leetcode 1366:堆缓冲区溢出
- 缓冲区溢出 - 数组索引越界(严重)
- C++二维矢量导致缓冲区溢出
- 缓冲区溢出怎么会成为黑客的攻击
- 如何防止缓冲区溢出
- 应该如何读取堆缓冲区溢出错误消息?
- 自动截断和 null 终止缓冲区溢出中的字符串缓冲区
- 如果用户输入两个或多个由空格分隔的字符串C++如何防止缓冲区溢出?
- 我正在尝试使用回溯来解决 N queen 问题,但在编译时它会给出运行时错误(动态堆栈缓冲区溢出)
- 为什么 LeetCode 给出错误:地址清理器:堆缓冲区溢出
- 为什么错误 C6386 缓冲区溢出与 strsafe.h 字符串 Cch 函数
- 读取文件时字符缓冲区溢出
- C 文本写入随机数据.是否有缓冲区溢出