3

我想读取一个字节的内存,但不知道内存是否真正可读。您可以在 OS X 下使用 vm_read 函数执行此操作,在 Windows 下使用 ReadProcessMemory 或_try / _catch 执行此操作。在 Linux 下,我相信我可以使用 ptrace,但前提是尚未调试。

仅供参考,我想这样做的原因是我正在编写异常处理程序状态转储代码,如果用户可以看到各种内存值是什么,或者知道它们是否无效,它将对用户有很大帮助。

4

1 回答 1

1

如果您不必很快(这在代码处理状态转储/异常处理程序中很常见),那么您可以在访问尝试之前放置自己的信号处理程序,并在之后恢复它。令人难以置信的痛苦和缓慢,但它完成了。

另一种方法是解析 /dev/proc//maps 的内容以构建内存映射一次,然后在每次访问时决定该地址是否在进程内部。

如果是我,我会尝试找到已经这样做的东西,如果许可证满足我的需要,我会直接重新实现或复制代码。从头开始编写是很痛苦的,而且很高兴有一些东西可以提供符号分辨率的支持跟踪。

于 2014-07-11T22:17:23.440 回答