c++ - 任意清理内存,同时避免读取访问冲突

标签 c++ windows debugging memory

我正在编写一个调试工具,它从另一个进程获取内存地址并显示那里的内存以及它周围的所有内存。通常,像这样读取内存可能会导致读取访问冲突,具体取决于地址,但如果用户删除进程不拥有的内存或选择一个奇怪的地址,我不想崩溃。

给定一个地址,即使是像 0x00000000 这样肯定会失败的地址,我如何在不违反程序的情况下尝试访问它而不中止我的程序?

最佳答案

VirtualQueryEx可用于迭代您有权访问的任何进程的所有页面,以检查页面保护。

QueryWorkingSetEx类似但过滤到在内存中分页,也称为 working set , 并且可以提供更详细的信息。

ReadProcessMemory最基本的是,一个包裹在内核异常处理程序中的 memcpy。你永远不会(正确地)使用它而崩溃,并且可以检查 GetLastError看看为什么会发生任何失败。

关于c++ - 任意清理内存,同时避免读取访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079610/

相关文章:

linux - 使用 golang 在 windows 和 linux 中捕获 ctrl+c 或任何其他进程终止信号

windows - 如何获取不同语言的管理员组名称

windows - 不同的 Windows 操作系统使用了多少个安全环?

c# - 如何查找正在使用我的连接池中的连接的内容

c++ - 做什么? XXX!yyyyyyyyyy+zzz 表示 !heap -flt s 输出

c++ - 计算给定数字列表的四分位数

c++ - 使用键盘输入暂停 C++ GLUT 程序

c - 仅在不使用调试器时出现段错误

c++ - InvokeHelper 正在调用哪个函数

c++ - 逐字逐句阅读长文本