【问题标题】:Reading/Writing another process memory in Python running on OS X在 OS X 上运行的 Python 中读取/写入另一个进程内存
【发布时间】:2012-06-04 10:12:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: python macos process


    【解决方案1】:

    是的,可以。

    当然不是直接 - 但您可以从 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 附加到正在运行的进程,但这留给读者作为练习。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 2011-06-05
      • 1970-01-01
      • 2021-06-09
      • 2016-02-26
      • 2020-03-24
      相关资源
      最近更新 更多