Pythonで記述されたソースコードを抽出するために、dllや.pydファイルを逆コンパイルする方法はありますか?
前もって感謝します
.pyd/.dllファイルはPythonではなくCythonで作成されたと思いますか?
とにかく、ファイルが元々コンパイルされた言語用に特別に設計された逆コンパイラがない限り、一般的には不可能です。 C、C++、Delphi、.NET、およびその他の逆コンパイラについては知っていますが、Cython逆コンパイラについてはまだ聞いていません。
もちろん、Cythonが行うことは、最初にPython [esque]コードをCコードに変換することです。つまり、Cデコンパイラを見つけて、元のPythonコードをデコンパイルしたものに基づいてCコード:少なくとも、この方法では、1つの(比較的)高水準言語から別の言語への翻訳を処理します。
最悪のシナリオでは、逆アセンブラを使用する必要があります。ただし、逆アセンブラーの出力からPythonコードを再作成するのは簡単ではありません(細胞を構成するタンパク質の化学式から脳の生物学的機能を推測するのに非常に似ています)。
さまざまな逆コンパイラや逆アセンブラに関するアイデアや提案について この質問 を見て、そこから調査を進めることができます。
私は受け入れられた答えに同意しません、はい、ソースコードの内容は.pyd
でもアクセス可能であるようです。
たとえば、エラーが発生した場合にどうなるか見てみましょう。
1)このファイルを作成します:
A = 6
print 'hello'
print A
print 1/0 # this will generate an error
2)python setup.py build
でコンパイルします:
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize("whathappenswhenerror.pyx"), include_dirs=[])
3).pydファイルを標準のpythonファイルにインポートします:
import whathappenswhenerror
4)python testwhathappenswhenerror.py
で実行してみましょう。出力は次のとおりです。
hello
6
Traceback (most recent call last):
File "D:\testwhathappenswhenerror.py", line 1, in <module>
import whathappenswhenerror
File "whathappenswhenerror.pyx", line 4, in init whathappenswhenerror (whathappenswhenerror.c:824)
print 1/0 # this will generate an error
ZeroDivisionError: integer division or modulo by zero
ご覧のとおり、print 1/0 # this will generate an error
ソースコードに含まれていた.pyx
コード行が表示されます!コメントも表示されます!
4 bis)ステップ3)の前に元の.pyxファイルを削除(または他の場所に移動)すると、元のコードprint 1/0 # this will generate an error
は表示されなくなります。
hello
6
Traceback (most recent call last):
File "D:\testwhathappenswhenerror.py", line 1, in <module>
import whathappenswhenerror
File "whathappenswhenerror.pyx", line 4, in init whathappenswhenerror (whathappenswhenerror.c:824)
ZeroDivisionError: integer division or modulo by zero
しかし、これは.pydに含まれていないということですか?よく分かりません。