使用 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 都是强大的工具。
很久以前,当我在 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 都是强大的工具。