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

标签 python macos process

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

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

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

最佳答案

是的,它可以。

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

您要调用的特定 C API 是 task_for_pid 和 mach_vm 方法。这些方法的联机帮助页在现代 OS X 中不存在,但 header 有详细记录(因此,就此而言,源代码很容易获得),您可以在线找到其他基于 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 附加到正在运行的进程,但这留给读者作为练习。

关于python - 在 OS X 上运行的 Python 中读取/写入另一个进程内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10879631/

相关文章:

python matplotlib 使用按钮事件添加和删除文本到图形

python - 给定一个字典和一个序列在 python 中返回它的总数

Python 网页抓取解决方案

linux - 来自 Mac OS X 的 ssh 连接显示 ">"提示并停留在那里

C# 进程 : Using Pipes/File Descriptors

python - 在 scikit-learn 流水线中插入或删除一个步骤

c# - 在 C# 中使用 Mono 单击鼠标 - Mac OS

swift - 在 OS X swift 3.0 中设置删除文件的权限

c++ - EnumWindows() 捕获选项卡进程 (Google Chrome) C++

c - C 中的 fork 和指针