Skip to main content

Python cross-version byte-code deparser

Project description

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 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

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 these failures may be bugs in the verification process. So as such, it is probably a little better than uncompyle2. Python 2.6 is catching up the versions of uncompyle2 that support 2.6 but is currently worse. Even less good is Python 2.5 bytecodes.

All of the Python 3.2-3.5 Python standard lib packages that I have installed on my system deparse. Each Python version has about 200 bytecode files. I’m not sure how well these verify though.

There are a few constructs that still need to be added to Python 3.5 Python 3.6 changes things drastically by using word codes rather than byte codes. So that will be yet another challenge

There is lots to do, so please dig in and help.

See Also

The above projects use a different decompiling technique what is used here.

The HISTORY file.

Project details


Release history Release notifications | RSS feed

This version

2.6.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uncompyle6-2.6.0.tar.gz (375.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

uncompyle6-2.6.0-py3.5.egg (348.7 kB view details)

Uploaded Egg

uncompyle6-2.6.0-py3.4.egg (350.0 kB view details)

Uploaded Egg

uncompyle6-2.6.0-py3.2.egg (348.8 kB view details)

Uploaded Egg

uncompyle6-2.6.0-py2.py3-none-any.whl (167.3 kB view details)

Uploaded Python 2Python 3

uncompyle6-2.6.0-py2.6.egg (349.9 kB view details)

Uploaded Egg

File details

Details for the file uncompyle6-2.6.0.tar.gz.

File metadata

  • Download URL: uncompyle6-2.6.0.tar.gz
  • Upload date:
  • Size: 375.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for uncompyle6-2.6.0.tar.gz
Algorithm Hash digest
SHA256 f524904495b2963af30dcde4e6b1b2f78d64a2d2f493b824ddeb3a41cfaa9327
MD5 e0f444ab9989512703cfd0ef6760798d
BLAKE2b-256 cc6c42bf5bcd974a49d2bb27756ed6781014293bebdea041e571160055021824

See more details on using hashes here.

File details

Details for the file uncompyle6-2.6.0-py3.5.egg.

File metadata

  • Download URL: uncompyle6-2.6.0-py3.5.egg
  • Upload date:
  • Size: 348.7 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for uncompyle6-2.6.0-py3.5.egg
Algorithm Hash digest
SHA256 269421ebc21bd1c166a731949bd11d73495e407d7fb7a2b5df860f7c72a202c4
MD5 be1a6d383239b0b6e08fe7ed420c1965
BLAKE2b-256 aaff7dc9b4be104b29818753f254535ac4cfddd81db1be3d92dd374047add88c

See more details on using hashes here.

File details

Details for the file uncompyle6-2.6.0-py3.4.egg.

File metadata

  • Download URL: uncompyle6-2.6.0-py3.4.egg
  • Upload date:
  • Size: 350.0 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for uncompyle6-2.6.0-py3.4.egg
Algorithm Hash digest
SHA256 cb883bf1521e2ae6d70df6d9c60fd7e3618e8373cb137b725701d2a3b2ee1b72
MD5 ebd6f479221cd03b2f9b06c4154f3f72
BLAKE2b-256 768e3c7d923d45e4f0be9e09779d6a5b86ed8f452b2152467683483b8dae3ba7

See more details on using hashes here.

File details

Details for the file uncompyle6-2.6.0-py3.2.egg.

File metadata

  • Download URL: uncompyle6-2.6.0-py3.2.egg
  • Upload date:
  • Size: 348.8 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for uncompyle6-2.6.0-py3.2.egg
Algorithm Hash digest
SHA256 e32629d5525a3809c7bf694d60d234a41fc6a8ccf310c9aeef5ccad52a9f5591
MD5 cf4ac67be44594d856f04f6b6236fbfb
BLAKE2b-256 3d620b6c010ad863059a9751aa5ca6169d3b6c8a220877142974a79f9a373f7f

See more details on using hashes here.

File details

Details for the file uncompyle6-2.6.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for uncompyle6-2.6.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 39db8b50e2a5e5221087159dbbd35d36d5f0138f7758bcff3e609dd218e1c00f
MD5 fb9c6d6cb20c5eb299c3c867e26c94b0
BLAKE2b-256 428e368296ef2ba26afc3d37eccb41de8fcdf35e4e52f5a7bc4b7ce96b797682

See more details on using hashes here.

File details

Details for the file uncompyle6-2.6.0-py2.6.egg.

File metadata

  • Download URL: uncompyle6-2.6.0-py2.6.egg
  • Upload date:
  • Size: 349.9 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for uncompyle6-2.6.0-py2.6.egg
Algorithm Hash digest
SHA256 166dc3c4b5e909eefea62693b8728c129e1698c2cd0dfa45af999edcdcffe9a6
MD5 78b4bc3a239af9c82e641b249e9201c5
BLAKE2b-256 5a38eef805a08ca70f04b0520e6b055143ad4157f7303138e019bfed7a4c1eb0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page