python-uncompyle6/README.rst

109 lines
2.9 KiB
ReStructuredText
Raw Normal View History

|downloads| |buildstatus|
uncompyle6
==========
2012-06-05 08:46:41 +00:00
A native Python Byte-code Disassembler, Decompiler, Fragment Decompiler
and byte-code library
2015-12-19 08:14:48 +00:00
2012-06-05 08:46:41 +00:00
Introduction
------------
2015-12-19 08:14:48 +00:00
*uncompyle6* translates Python byte-code back into equivalent Python
source code. It accepts byte-codes from Python version 2.5 to 3.4 or
2015-12-31 04:48:27 +00:00
so and has been tested on Python running versions 2.6, 2.7, 3.3,
3.4 and 3.5.
2012-06-05 08:46:41 +00:00
2015-12-19 22:52:04 +00:00
Why this?
---------
2012-06-05 08:46:41 +00:00
2015-12-19 22:52:04 +00:00
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.
2012-06-05 08:46:41 +00:00
2015-12-19 22:52:04 +00:00
I using this to deparse fragments of code inside my trepan_
2015-12-27 17:55:43 +00:00
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.
2015-12-19 22:54:37 +00:00
See this_ for more information.
2015-12-25 05:35:11 +00:00
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
2015-12-22 02:58:33 +00:00
bytecode-related tasks. For example you can read in bytecode,
i.e. perform a version-independent `marshal.loads()`, and disassemble
2016-01-02 18:32:32 +00:00
the bytecode using a version of Python different from the one used to
2015-12-22 02:58:33 +00:00
compile the bytecode.
2012-06-05 08:46:41 +00:00
Installation
------------
This uses setup.py, so it follows the standard Python routine:
2012-06-05 08:46:41 +00:00
2015-12-15 07:06:21 +00:00
::
python setup.py install # may need sudo
# or if you have pyenv:
python setup.py develop
2012-06-05 08:46:41 +00:00
A GNU makefile is also provided so `make install` (possibly as root or
sudo) will do the steps above.
2012-06-05 08:46:41 +00:00
Testing
-------
2012-06-05 08:46:41 +00:00
2015-12-19 08:14:48 +00:00
::
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`
2012-06-05 08:46:41 +00:00
Usage
-----
Run
2015-12-15 07:06:21 +00:00
::
2015-12-15 07:18:12 +00:00
./bin/uncompyle6 -h
./bin/pydisassemble -y
for usage help
2012-06-05 08:46:41 +00:00
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.
2015-12-19 08:14:48 +00:00
See Also
--------
* https://github.com/zrax/pycdc
* https://github.com/Mysterie/uncompyle2
* https://github.com/DarkFenX/uncompyle3
* https://code.google.com/p/unpyc3/
2015-12-19 08:14:48 +00:00
2015-12-25 05:35:11 +00:00
The HISTORY file.
2015-12-19 08:14:48 +00:00
.. |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
2015-12-19 08:14:48 +00:00
.. _pycdc: https://github.com/zrax/pycdc
2015-12-19 22:54:37 +00:00
.. _this: https://github.com/rocky/python-uncompyle6/wiki/Deparsing-technology-and-its-use-in-exact-location-reporting
2015-12-22 02:39:46 +00:00
.. |buildstatus| image:: https://travis-ci.org/rocky/python-uncompyle6.svg
2015-12-22 02:53:20 +00:00
:target: https://travis-ci.org/rocky/python-uncompyle6