
* Port test runner script to Python. This allows us to keep the test output in sorted order while still running the tests in parallel. It also now defaults to using the number of available CPU threads for parallel execution, rather than the previously hard-coded default. * Also port decompyle_test.sh script to python within run_tests.py * Fix cmake check target for multi-config generators. Adds testing of release builds on both MSVC and GCC. * Fix diff comparisons on Windows * Ubuntu runners don't have ninja by default
Decompyle++
A Python Byte-code Disassembler/Decompiler
Decompyle++ 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)
- The following options can be passed to CMake to control debug features:
Option Description -DCMAKE_BUILD_TYPE=Debug
Produce debugging symbols -DENABLE_BLOCK_DEBUG=ON
Enable block debugging output -DENABLE_STACK_DEBUG=ON
Enable stack debugging output
- The following options can be passed to CMake to control debug features:
-
Build the generated project or makefile
- For projects (e.g. MSVC), open the generated project file and build it
- For makefiles, just run
make
- To run tests (on *nix or MSYS), run
make check JOBS=4
(optionalFILTER=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
It is released under the terms of the GNU General Public License, version 3; See LICENSE file for details.