12

我有一个封闭源代码的第 3 方程序,我希望能够

  • 知道分配给程序的内存
  • 访问该内存(只读很好)

vmmap(1)、heap(1) 和leaks(1) 之类的实用程序似乎与我需要的功能相似,但我无法在任何地方找到它们的源代码(OS X 版本),也无法弄清楚它们是如何使用的工作。最好这一切都在用户空间中完成,可能以 root 身份运行,如果可以避免的话,我不想编写内核代码来绕过内存保护。

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

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

这是如何实现的?

4

2 回答 2

4

基本上,这个人是对的。

去下载本书随附的源代码,并查看示例 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/

于 2012-06-11T06:50:47.217 回答
3

我无法访问 OS X 机器,但这看起来与您尝试做的非常相似:

在 OS X 中读取其他进程的内存?

这是不起作用的链接的存档:

http://web.archive.org/web/20090627062246/http://www.matasano.com/log/1100/what-ive-been-doing-on-my-summer-vacation-or-it-has-工作-否则-gdb-wouldnt/

于 2012-06-11T03:59:28.917 回答