【发布时间】:2020-03-23 13:33:39
【问题描述】:
我正在编写一个调试工具,它从另一个进程获取内存地址并显示那里的内存以及它周围的所有内存。通常情况下,像这样读取内存可能会导致读取访问冲突,具体取决于地址,但我不想在用户刷入进程不拥有的内存或选择奇怪的地址时崩溃。
给定一个地址,即使是像0x00000000 这样肯定会失败的地址,如果它违反了我如何尝试访问它而不中止我的程序?
【问题讨论】:
-
你试过try-catch吗?在 MS C++ 中,它确实会捕获那些新的,但不会捕获堆栈中的那些。我不知道 cygwin/mingw GNU C++ 或 Windows 平台上可用的其他 C++ 编译器。
-
使用ReadProcessMemory - 无论如何你都需要。它不会使目标应用程序崩溃,而只是在内存地址对读取无效的情况下返回失败。
-
@cup:
try catch用于 C++ 异常,而不是访问冲突。但这也不是访问冲突,正如上面的评论所解释的那样。
标签: c++ windows debugging memory