A cross-version Python bytecode decompiler
Go to file
2015-12-30 23:46:29 -05:00
bin main.py, pysource.py DRY deparse_code from main. Is better on showing 2015-12-22 05:15:00 -05:00
pytest Port deparse test from python-deparse to py.test 2015-12-25 00:02:17 -05:00
test Allow Python 3.5 to decomplyle other versions. No Python 3.5 2015-12-30 23:46:29 -05:00
uncompyle6 Allow Python 3.5 to decomplyle other versions. No Python 3.5 2015-12-30 23:46:29 -05:00
__pkginfo__.py Get ready for release 2.1.1 2015-12-27 12:55:52 -05:00
.gitignore Get ready for releaes 2.0.0 2015-12-25 00:31:29 -05:00
.travis.yml Running native on Python 3.3 needs more work 2015-12-26 19:32:32 -05:00
ChangeLog Get ready for release 2.1.1 2015-12-27 12:55:52 -05:00
circle.yml Python3: remove "return None" at end of main for uncompyle. Fix up verify for Python3. First automated Python 3.4 tests via "makecheck-3.4" in test directory. 2015-12-17 18:53:30 -05:00
compile_tests first commit 2012-06-05 10:46:41 +02:00
HISTORY.md Bug in for loop with try. Add more of 2.7's COME_FROM statements. 2015-12-21 21:08:08 -05:00
LICENSE Docs 2015-12-19 03:14:48 -05:00
Makefile Allow Python 3.5 to decomplyle other versions. No Python 3.5 2015-12-30 23:46:29 -05:00
MANIFEST.in Get ready for releaes 2.0.0 2015-12-25 00:31:29 -05:00
NEWS Get ready for release 2.1.1 2015-12-27 12:55:52 -05:00
PKG-INFO README.rst: note addition of pydisassemble 2015-12-15 01:42:07 -05:00
README.rst scanner3: Python 2.6 compatibility: change set initializations. Get rid 2015-12-29 08:30:49 -05:00
requirements-dev.txt Fix up Python 3.2, 3.3, and 3.4 cross-version scanners 2015-12-26 10:19:26 -05:00
setup.cfg MAJ owner/information 2012-06-05 11:37:42 +02:00
setup.py Package scripts correctly now 2015-12-14 22:18:26 -05:00
test-requirements.txt Add some disassemble tests using pytest. 2015-12-15 17:58:38 -05:00
tox.ini Minimal disassemble, ast compile and deparse work on Python 3. 2015-12-12 13:22:44 -05:00

|buildstatus|

uncompyle6
==========

A native Python Byte-code Disassembler, Decompiler, Fragment Decompiler
and byte-code library


Introduction
------------

*uncompyle6* translates Python byte-code back into equivalent Python
source code. It accepts byte-codes from Python version 2.5 to 3.4 or
so and has been tested on Python running versions 2.6, 2.7, 3.3 and
3.4.

Why this?
---------

What makes this different other CPython byte-code decompilers?  Its
ability to deparse just fragments and give source-code information
around a given bytecode offset.

I using this to deparse fragments of code inside my trepan_
debuggers_. For that, I need to record text fragments for all
byte-code offsets (of interest). This purpose although largely
compatible with the original intention is yet a little bit different.
See this_ for more information.

The idea of Python fragment deparsing given an instruction offset can
be used in showing stack traces or any program that wants to show a
location in more detail than just a line number.  It can be also used
when source-code information does not exist and there is just bytecode
information.

Other parts of the library can be used inside Python for various
bytecode-related tasks. For example you can read in bytecode,
i.e. perform a version-independent `marshal.loads()`, and disassemble
the bytecode using version of Python different from the one used to
compile the bytecode.


Installation
------------

This uses setup.py, so it follows the standard Python routine:

::

    python setup.py install # may need sudo
    # or if you have pyenv:
    python setup.py develop

A GNU makefile is also provided so `make install` (possibly as root or
sudo) will do the steps above.

Testing
-------

::

   make check

A GNU makefile has been added to smooth over setting running the right
command, and running tests from fastest to slowest.

If you have remake_ installed, you can see the list of all tasks
including tests via `remake --tasks`


Usage
-----

Run

::

     ./bin/uncompyle6 -h
     ./bin/pydisassemble -y

for usage help


Known Bugs/Restrictions
-----------------------

Python 2 deparsing is probably as solid as the various versions of
uncompyle2.  Python 3 deparsing is okay but not as solid.

See Also
--------

* https://github.com/zrax/pycdc
* https://github.com/Mysterie/uncompyle2
* https://github.com/DarkFenX/uncompyle3
* https://code.google.com/p/unpyc3/

The HISTORY file.

.. _trepan: https://pypi.python.org/pypi/trepan
.. _debuggers: https://pypi.python.org/pypi/trepan3k
.. _remake: https://bashdb.sf.net/remake
.. _pycdc: https://github.com/zrax/pycdc
.. _this: https://github.com/rocky/python-uncompyle6/wiki/Deparsing-technology-and-its-use-in-exact-location-reporting
.. |buildstatus| image:: https://travis-ci.org/rocky/python-uncompyle6.svg
		 :target: https://travis-ci.org/rocky/python-uncompyle6