
swap
bytecode and simple WITH_EXCEPT_START
bytecode support. (#488)
* Modify .gitignore * Added support for SWAP and WITH_EXCEPT_START, WITH_EXCEPT_START is simply added on top of SETUP_WITH_A so that it works properly. * Resolve the warning about comparing size_t and int. * Revert "Resolve the warning about comparing size_t and int." This reverts commit 54dfe36629855ca557277572d307dacaf6a64fe9. * Reapply "Resolve the warning about comparing size_t and int." This reverts commit d21d1681ed6496856ea65151e5fd798f0a718416. * Modify decompyle_test.sh * Modify .gitignore * Fix the logic error by placing the assignment inside the tuple * Re-adding test files * Fixing redundant brackets * Add support for swap bytecode and simple WITH_EXCEPT_START bytecode support. * Clean up some formatting issues --------- Co-authored-by: Michael Hansen <zrax0111@gmail.com>
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.