在OS X上运行的Python中读取/写入另一个进程内存

时间:2012-06-04 10:12:03

标签: python macos process

在Mac OS X Lion上运行时,是否可以使用Python读取/写入另一个进程内存(不是Python进程,并且不使用共享内存或其他内容)?

例如,我想启动Safari并监控Safari使用的几个内存地址。

在Windows中,我发现了很多解决方案,但可以在Mac OS X上完成吗?

1 个答案:

答案 0 :(得分:4)

是的,它可以。

当然不是直接的 - 但你可以通过在C(或Pyrex等)中构建Python扩展模块,或者在Python中使用ctypes来调用你想要的任何C API。

您要调用的特定C API是task_for_pid和mach_vm方法。现代OS X中不存在这些方法的联机帮助页,但是文档很好地记录(因此,就此而言,它是可用的源代码),您可以在线查找其他基于Mach的系统的联机帮助页,还有很多第三方文档。

有关概念的快速证明,请参阅https://github.com/abarnert/pymach。您应该能够使用“python setup.py build_ext --inplace”或“sudo python setup.py install”构建它,然后查看test.py以获取如何使用它的简单示例。

请记住,在现代OS X中,除非您是root用户,否则您只能访问子进程。最简单的方法是让您的脚本实际启动Safari。或者,如果你不能这样做,只需sudo你的脚本。或者,您可以使用ptrace来附加到正在运行的进程,但这仍然是读者的练习。