You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 00:45:53 +08:00
120 lines
3.6 KiB
ReStructuredText
120 lines
3.6 KiB
ReStructuredText
|buildstatus|
|
|
|
|
uncompyle6
|
|
==========
|
|
|
|
A native Python cross-version Decompiler and Fragment Decompiler.
|
|
Follows in the tradition of decompyle, uncompyle, and uncompyle2.
|
|
|
|
|
|
Introduction
|
|
------------
|
|
|
|
*uncompyle6* translates Python bytecode back into equivalent Python
|
|
source code. It accepts bytecodes from Python version 2.5 to 3.5 or
|
|
so. The code requires Python 2.6 or later and has been tested on Python
|
|
running versions 2.6, 2.7, 3.2, 3.3, 3.4 and 3.5.
|
|
|
|
Why this?
|
|
---------
|
|
|
|
There were a number of decompyle, uncompile, uncompyle2, uncompyle3
|
|
forks around. All of them come basically from the same code base, and
|
|
almost all of them not maintained very well. This code pulls these together
|
|
and addresses a number of open issues in those.
|
|
|
|
What makes this different from other CPython bytecode decompilers? Its
|
|
ability to deparse just fragments and give source-code information
|
|
around a given bytecode offset.
|
|
|
|
I use this to deparse fragments of code inside my trepan_
|
|
debuggers_. For that, I need to record text fragments for all
|
|
bytecode 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.
|
|
|
|
Installation
|
|
------------
|
|
|
|
This uses setup.py, so it follows the standard Python routine:
|
|
|
|
::
|
|
|
|
pip install -r requirements.txt
|
|
pip install -r requirements-dev.txt
|
|
python setup.py install # may need sudo
|
|
# or if you have pyenv:
|
|
python setup.py develop
|
|
|
|
A GNU makefile is also provided so :code:`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 :code:`remake --tasks`
|
|
|
|
|
|
Usage
|
|
-----
|
|
|
|
Run
|
|
|
|
::
|
|
|
|
./bin/uncompyle6 -h
|
|
|
|
for usage help.
|
|
|
|
|
|
Known Bugs/Restrictions
|
|
-----------------------
|
|
|
|
Python 2 deparsing decompiles each and all the Python 2.7.10 and
|
|
2.7.11 installed packages I have on my system. more than 90% verify
|
|
ok. Some of thse failures may be bugs in the verification process. So
|
|
as such, it is probably a little better than uncompyle2. Other Python
|
|
2 versions do worse.
|
|
|
|
More than 90% the Python 3.3, and 3.4 Python packages that I have
|
|
installed on my system deparse. Python 3.2 fares at a little less than
|
|
90%. (Each Python version has about 200 byteocde files). All of the
|
|
bytecode deparses also verify. Python is more problematic and is
|
|
missing some of new opcodes and idioms added. But it still often
|
|
works.
|
|
|
|
There is lots to do, so please dig in and help.
|
|
|
|
See Also
|
|
--------
|
|
|
|
* https://github.com/zrax/pycdc : supports all versions of Python and is written in C++
|
|
* https://code.google.com/archive/p/unpyc3/ : supports Python 3.2 only
|
|
|
|
The above projects use a different decompiling technique what is used here.
|
|
|
|
The HISTORY file.
|
|
|
|
.. |downloads| image:: https://img.shields.io/pypi/dd/uncompyle6.svg
|
|
.. _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
|