我正在编写一个调试工具,它从另一个进程获取内存地址并显示那里的内存以及它周围的所有内存。通常,像这样读取内存可能会导致读取访问冲突,具体取决于地址,但如果用户删除进程不拥有的内存或选择一个奇怪的地址,我不想崩溃。
给定一个地址,即使是像 0x00000000
这样肯定会失败的地址,我如何在不违反程序的情况下尝试访问它而不中止我的程序?
最佳答案
VirtualQueryEx可用于迭代您有权访问的任何进程的所有页面,以检查页面保护。
QueryWorkingSetEx类似但过滤到在内存中分页,也称为 working set , 并且可以提供更详细的信息。
ReadProcessMemory最基本的是,一个包裹在内核异常处理程序中的 memcpy。你永远不会(正确地)使用它而崩溃,并且可以检查 GetLastError看看为什么会发生任何失败。
关于c++ - 任意清理内存,同时避免读取访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079610/