C++ python bytecode disassembler and decompiler
  • C++ 84.5%
  • Python 14.9%
  • CMake 0.5%
Find a file
2019-10-04 14:57:59 -07:00
.github/workflows Add Github Actions CI build 2019-10-04 11:32:27 -07:00
bytes Fix bytecode compatibility with Python 3.7 beta3 2018-04-26 14:38:02 -07:00
scripts Migrate several more passing tests to new test framework 2019-10-04 11:05:52 -07:00
tests Display the diff when a test doesn't match the expected output. 2019-10-04 14:57:59 -07:00
.gitignore Switch build system to CMake 2014-06-10 19:20:56 -07:00
ASTNode.cpp Don't create special objects for NULL, just use NULL directly. 2017-07-05 16:36:04 -07:00
ASTNode.h Don't write parens around for loop value tuples 2019-10-04 14:08:47 -07:00
ASTree.cpp Don't write parens around for loop value tuples 2019-10-04 14:08:47 -07:00
ASTree.h Fixed imports, and restructured ifs to be "code blocks" 2010-09-07 21:32:34 -07:00
bytecode.cpp Use fputs instead of fprintf when no formatting is required 2018-01-28 15:37:44 -08:00
bytecode.h Update bytecode for Python 3.6 beta3, and use a common file for opcode names 2016-11-08 16:00:56 -08:00
bytecode_ops.inl Add initial 3.7 alpha support, and fix 3.6 opcode map 2017-12-20 13:49:28 -08:00
CMakeLists.txt Add a test for unpack assignment 2019-10-04 14:33:38 -07:00
data.cpp Fix several undefined behavior issues identified by @nrathaus. 2018-01-28 15:37:44 -08:00
data.h Start requring C++11 with explicit virtual overrides. 2019-10-02 14:41:49 -07:00
FastStack.h Don't create special objects for NULL, just use NULL directly. 2017-07-05 16:36:04 -07:00
LICENSE Added GPL v3 license file 2009-07-25 00:43:46 +00:00
pyc_code.cpp Remove unnecessary complexity and just use the base sequence type common 2018-04-28 11:37:13 -07:00
pyc_code.h Start requring C++11 with explicit virtual overrides. 2019-10-02 14:41:49 -07:00
pyc_module.cpp Fix bytecode compatibility with Python 3.7 beta3 2018-04-26 14:38:02 -07:00
pyc_module.h Update magic for 3.7.0 release 2018-07-02 13:13:58 -07:00
pyc_numeric.cpp Use std::string instead of manual character buffers where applicable. 2019-10-02 16:01:54 -07:00
pyc_numeric.h Use std::string instead of manual character buffers where applicable. 2019-10-02 16:01:54 -07:00
pyc_object.cpp Don't create special objects for NULL, just use NULL directly. 2017-07-05 16:36:04 -07:00
pyc_object.h Use std::string instead of manual character buffers where applicable. 2019-10-02 16:01:54 -07:00
pyc_sequence.cpp Remove unnecessary complexity and just use the base sequence type common 2018-04-28 11:37:13 -07:00
pyc_sequence.h Start requring C++11 with explicit virtual overrides. 2019-10-02 14:41:49 -07:00
pyc_string.cpp Use std::string instead of manual character buffers where applicable. 2019-10-02 16:01:54 -07:00
pyc_string.h Use std::string instead of manual character buffers where applicable. 2019-10-02 16:01:54 -07:00
pycdas.cpp Fix several undefined behavior issues identified by @nrathaus. 2018-01-28 15:37:44 -08:00
pycdc.cpp Fix several undefined behavior issues identified by @nrathaus. 2018-01-28 15:37:44 -08:00
pycdc_rt_test.sh Use pymultic for executing the rt_test 2019-10-02 21:18:35 -07:00
pycdc_test.sh Use .src.py extension instead of .src for pycdc test output 2016-08-31 16:13:18 -07:00
PythonBytecode.txt Update magic for 3.7.0 release 2018-07-02 13:13:58 -07:00
README.markdown Fix #51 by adding more precise build instructions 2014-12-03 18:07:27 -08:00

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)
  • 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 test

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.

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.