2012-06-04 50 views
3

當在Mac OS X Lion上運行時,可以使用Python讀取/寫入另一個進程內存(不是Python進程,也不使用共享內存或任何其他內容) ?在OS X上運行的Python中讀取/寫入另一個進程內存

例如,我想啓動Safari並監視Safari使用的幾個內存地址。

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

回答

4

是的,它可以。當然不是直接的,但是你可以通過在C(或Pyrex等)中構建一個Python擴展模塊,或者使用Python中的ctypes來調用任何你想從Python獲得的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附加到正在運行的進程,但這只是讀者的練習。

相關問題