【发布时间】:2012-06-14 00:18:59
【问题描述】:
我有一个封闭源代码的第 3 方程序,我希望能够
- 了解分配给程序的内存
- 访问该内存(只读即可)
vmmap(1)、heap(1) 和leaks(1) 之类的实用程序似乎具有与我需要的功能相似的功能,但我无法在任何地方找到它们的源代码(OS X 版本)并且无法确定弄清楚它们是如何工作的。最好这一切都在用户空间中完成,可能以 root 身份运行,如果可以避免的话,我不想编写内核代码来绕过内存保护。
我尝试使用共享内存将我想要读取的地址作为第二个参数传递给 shmat(2),但这最终没有成功(并且可能不是它的预期用途和/或不好的做法)并且仍然让我没有一种确定我正在寻找的内存的方法(拥有内存的程序必须向我报告它的地址)。
有没有办法只禁用某个程序的内存保护,以便它在尝试读/写分配给不同进程的内存时不会出现段错误?有没有更好的方法不会让错误严重破坏我的整个系统?
这是如何实现的?
【问题讨论】:
-
您是否尝试过跟踪此类实用程序的系统调用?
-
@icktoofay 好主意。以前从来没有这样做过。我刚刚使用 Shark.app 尝试过(不稳定的 gui 废话,只是谷歌找到我的第一个建议)但有一些问题 1)符号名称丢失 2)鲨鱼不断崩溃(我会尝试看看我是否可以使用 GDB 或其他东西执行此操作),以及 3)我找不到看起来可能相关的系统调用的文档(io_connect_method、io_connect_(un)map_memory、一些 mach_* 东西)。 4) 我会花很长时间去挖掘转储并弄清楚如何正确使用这些调用。某处必须有文档...
标签: c macos unix shared-memory