你如何安全地阅读在Unix(或至lessLinux)的内存?

我想读取一个字节的内存,但不知道内存是否真正可读。 您可以在OS X下使用vm_read函数在Windows下使用ReadProcessMemory或使用_ try / _catch。 在Linux下我相信我可以使用ptrace,但只有在没有被debugging的情况下。

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

如果你不需要快速,这在代码处理状态转储/异常处理程序中是很典型的,那么你可以在访问尝试之前把你自己的信号处理程序放在适当的位置,然后恢复它。 令人难以置信的痛苦和缓慢,但它完成了。

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

如果是我,我会尝试找到已经做到这一点的东西,如果许可证符合我的需要,可以直接重新实施或复制代码。 从零开始编写是件痛苦的事情,而且很高兴能有一些能够为符号解析提供支持的东西。