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

在Mac OS X Lion上运行时,是否可以使用Python读取/写入另一个进程内存(不是Python进程,并且不使用共享内存或任何东西)?例如,我要启动Safari并监视Safari使用的多个内存地址.在Windows中,我找到了很多解决方案,但是...

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

例如,我要启动Safari并监视Safari使用的多个内存地址.

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

解决方法:

是的,它可以.

当然,这不是直接的,但是您可以从Python调用所需的任何C API,方法是在C(或Pyrex等)中构建Python扩展模块,或者在Python中使用ctypes.

您要调用的特定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附加到正在运行的进程,但这留给读者练习.

本文标题为:在OS X上运行的Python中读/写另一个进程内存

基础教程推荐