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

时间:2012-06-11 03:35:12

标签: c macos unix shared-memory

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

  • 了解为程序分配的内存
  • 访问该内存(只读即可)

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

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

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

这是如何实现的?

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

基本上,this guy是对的。

请下载source code附带的this book,并查看示例8-16的vm_rw_master.c以了解正常工作。

有关文档的信息,请参阅http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/,它有点过时,而且有问题,但它是最好的。

编辑:另外,请参阅http://lightbulbone.com/2011/05/dumping-process-memory-on-mac-os-x/(请注意,拥有您正在尝试阅读的内存的任务不需要是尝试阅读的过程的孩子,您只需要拥有适当的授权。)

编辑:另外,请参阅http://os-tres.net/blog/2010/02/17/mac-os-x-and-task-for-pid-mach-call/以获取授权的好例子。