我有一个闭源第三方程序,我希望能够
vmmap(1),heap(1)和leaks(1)等实用程序似乎具有与我需要的功能类似的功能,但我无法在任何地方找到它们的源(OS X版本)并且无法计算他们如何工作。优选地,这将全部在用户空间中完成,可能以root身份运行,我不想编写内核代码以绕过内存保护,如果我可以避免它。
我尝试使用共享内存传递我想要读取的地址作为shmat(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/以获取授权的好例子。