如何从另一个程序访问内存

use*_*364 10 c unix macos shared-memory

我有一个闭源第三方程序,我希望能够

  • 知道为程序分配了什么内存
  • 访问该内存(只读是好的)

像vmmap(1),heap(1)和leaks(1)这样的实用程序似乎具有与我需要的功能类似的功能,但我无法在任何地方(OS X版本)找到它们的源代码,并且无法弄清楚它们是如何实现的工作.优选地,这将全部在用户空间中完成,可能以root身份运行,我不想编写内核代码以绕过内存保护,如果我可以避免它.

我尝试使用共享内存传递我想要读取的地址作为shmat(2)的第二个参数,但这最终是不成功的(可能不是它的预期用法和/或不好的做法)并且仍然没有办法确定我正在寻找的内存(拥有内存的程序必须向我报告其地址).

有没有办法只是禁用某个程序的内存保护,以便它在尝试读/写分配给不同进程的内存时不会出现段错误?有没有更好的方法不会使错误严重破坏我的整个系统?

这是如何实现的?