我在 Visual Studio 2008 中调试一段代码,在运行程序时会引发 bufferover 运行,我想使用数据写入断点测试变量,有人可以告诉我如何将数据写入断点放在变量上
2 回答
如果您提供代码片段会更实用。我被迫自己做:
void foo() {
int ix = 0x42;
int jx;
long long* p = (long long*)&ix;
*p = 0x100000042LL;
}
这种故意的堆栈损坏尝试将破坏调试器:
所以我在函数入口处设置了一个断点,并在变量“ix”的地址之后设置了一个数据断点,Debug + New Breakpoint + New Data Breakpoint:
并按 F5 继续运行。数据断点触发:
最好的方法是使用 WinDbg。Visual Studio 在中断数据写入或数据读取方面不是很好。您可以从http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx免费获得 WinDbg您可以在线找到有关 WinDbg 的广泛帮助,包括如何使用它来中断数据点读取、阅读/writes,或者只是写。Microsoft 提供了来自我列出的 URL 的链接,并且http://windbg.info有很多关于使用 WinDbg 的信息。
但是,如果您坚持使用 Visual Studio 2008,方法是在您的 Visual Studio 调试器下启动程序。在您感兴趣的变量处于活动状态的代码中设置一个断点。一旦调试器在断点处中断执行,您可以使用“新断点”菜单在变量 read 或 write 上添加新断点。您可能需要选择您感兴趣的变量,然后使用上下文选择来启动“新断点”。选择“Datapoint access”,选择是读还是写还是读/写访问。
有关更多详细信息,请参阅:http: //msdn.microsoft.com/en-us/library/350dyxd0 (v=VS.90).aspx