从visual studio内存窗口保存数据

StN*_*lay 29 memory debugging window visual-studio

是否有可能在任何二进制文件中保存一些缓冲区,以便在独立的十六进制编辑器中查看.

例如,我可以将数据从VS中的内存窗口保存到十六进制转储,但不能保存为ASCII吗?

StN*_*lay 6

user142207在调查VS内部方面做得很好,我建议解决方案.我的另一种方式是由我的同事Sergey S.发明的,这非常有用:

Windows:使用几个函数ReadProcessMemory/ WriteProcessMemory.它需要一个独立的应用程序,使用目标进程ID调用这些函数,如:

dumper.exe <debugged process id> <memory_start_addr> <memory_length>
Run Code Online (Sandbox Code Playgroud)

可以在VS调试会话期间直接调用此应用程序(与Linux相比,它没有这种可能性).我们可以在监视窗口中捕获内存地址,然后将地址传递给转储器并瞧.正如user142207在他的文章中所说,它在长时间重新编译的项目中非常有用.

Linux/MacOS有不同的方法.例如:从gdb控制台,使用命令dump memory.此命令也可以在调试会话期间直接使用.


Sas*_*ein 5

我不知道这是否有帮助,但你可以使用WinDbg的.writemem命令.它需要一个文件名和一个内存范围,并将其(作为二进制文件)转储到磁盘.


Ste*_*eed 5

有一个扩展:https://marketplace.visualstudio.com/items?itemName=OvidiuIonescu.VSDebugTool。它在 VisualStudio 窗口中打开其控制台,并允许将内存转储到文件和一些其他内存操作(在控制台中输入“help”以获取详细信息)。

此外,一些十六进制编辑器(例如Hex Editor Neo)可以像普通文件一样浏览进程内存。也许您也会找到具有此功能的免费编辑器。


小智 5

StNickolay 的答案引用了一些名为“dumper”的工具,但不知何故,我无法在网上找到它(而且,user142207 早已不复存在)。所以我创建了相同的工具——它打开正在运行的进程(即使附加了调试器)并将其内存的一部分复制到文件中。当您想为以后存储一些结构并且不想为 VS 内存视图“复制”输出而烦恼时,这非常有用。享受!

https://github.com/Alexx999/Dumper