3

Mac OS X Lion で実行しているときに、Python を使用して別のプロセス メモリ (Python プロセスではなく、共有メモリなどを使用しない) を読み書きすることは可能ですか?

たとえば、Safari を起動して、Safari が使用するいくつかのメモリ アドレスを監視したいとします。

Windows では多くの解決策を見つけましたが、Mac OS X でも実行できますか?

4

1 に答える 1

6

はい、できます。

もちろん、直接ではありませんが、C (または Pyrex など) で Python 拡張モジュールを構築するか、Python 内から ctypes を使用することにより、必要な C API を Python から呼び出すことができます。

呼び出す特定の 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 を使用して実行中のプロセスにアタッチすることもできますが、これは読者の課題として残しています。

于 2012-06-04T21:07:12.977 に答える