sys.modules にアクセスできる場合、ロードされたモジュールの人間が読めるソースを構築することは可能ですか?
できないと言う人もいますが、Python ではそれが可能であると確信しています。
sys.modules にアクセスできる場合、ロードされたモジュールの人間が読めるソースを構築することは可能ですか?
できないと言う人もいますが、Python ではそれが可能であると確信しています。
標準ライブラリのdisモジュールを使用して、Python でコード化されたモジュールを逆アセンブルできます。これにより、 Pythonソースではなく、バイトコードソースである、間違いなく人間が読めるソースが生成されます。オムレツから始めて卵を元に戻すのは少し難しいです。
以前は Python 2.3 用の逆コンパイラがありました (ここを参照) が、ここ数年誰かがそれを維持しているかどうかはわかりません。これは、オープン ソース コミュニティでこのタスクにあまり関心がないことを示唆しています。同意しない場合は、そのプロジェクトをフォークして、2.7 (または逆コンパイルしたい Python リリース) を逆コンパイルすることを目的とした独自のプロジェクトを作成し、このタスクに熱心な他の人を引き付けることができます。
通常、ソース コードはファイル システムの sys.modules から簡単に見つけられる場所にあります。
for name, mod in sys.modules.items():
try:
fname = mod.__file__
except AttributeError:
continue
if fname.endswith(".pyc"):
fname = fname[:-1]
try:
fcode = open(fname)
except IOError:
continue
code = fcode.read()
# .. do something with name and code