C++ python bytecode disassembler and decompiler
Decompyle++
A Python Byte-code Disassembler/DecompilerDecompyle++ aims to translate compiled Python byte-code back into valid and human-readable Python source code. While other projects have achieved this with varied success, Decompyle++ is unique in that it seeks to support byte-code from any version of Python.
Decompyle++ includes both a byte-code disassembler (pycdas) and a decompiler (pycdc).
As the name implies, Decompyle++ is written in C++. If you wish to contribute, please fork us on github at https://github.com/zrax/pycdc
Building Decompyle++
- Generate a project or makefile with CMake (See CMake's documentation for details)
| Option | Description | | --- | --- | | -DCMAKEBUILDTYPE=Debug | Produce debugging symbols | | -DENABLEBLOCKDEBUG=ON | Enable block debugging output | | -DENABLESTACKDEBUG=ON | Enable stack debugging output |
- Build the generated project or makefile
make
To run tests (on \nix or MSYS), run make check JOBS=4 (optional
FILTER=xxxx to run only certain tests)
Usage
To run pycdas, the PYC Disassembler:./pycdas [PATH TO PYC FILE]
The byte-code disassembly is printed to stdout.
To run pycdc, the PYC Decompiler: ./pycdc [PATH TO PYC FILE] The decompiled Python source is printed to stdout. Any errors are printed to stderr.
Marshalled code objects: Both tools support Python marshalled code objects, as output from marshal.dumps(compile(...)).
To use this feature, specify -c -v <version> on the command line - the version must be specified as the objects themselves do not contain version metadata.
Authors, Licence, Credits
Decompyle++ is the work of Michael Hansen and Darryl Pogue.Additional contributions from:
- charlietang98
- Kunal Parmar
- Olivier Iffrig
- Zlodiy