You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
:code:`BREAK_LOOP`, and :code:`CONTINUE_LOOP`, instructions which may
223
219
make control-flow detection harder, lacking the more sophisticated
224
220
control-flow analysis that is planned. We'll see.
225
221
226
-
Currently not all Python magic numbers are supported. Specifically in
222
+
Currently, not all Python magic numbers are supported. Specifically in
227
223
some versions of Python, notably Python 3.6, the magic number has
228
224
changes several times within a version.
229
225
230
-
**We support only released versions, not candidate versions.** Note
231
-
however that the magic of a released version is usually the same as
226
+
**We support only released versions, not candidate versions.** Note, however, that the magic of a released version is usually the same as
232
227
the *last* candidate version prior to release.
233
228
234
229
There are also customized Python interpreters, notably Dropbox,
235
230
which use their own magic and encrypt bytecode. With the exception of
236
-
the Dropbox's old Python 2.5 interpreter this kind of thing is not
231
+
Dropbox's old Python 2.5 interpreter, this kind of thing is not
237
232
handled.
238
233
239
234
We also don't handle PJOrion_ or otherwise obfuscated code. For
@@ -245,20 +240,20 @@ Py2EXE_, although we can probably decompile the code after you extract
245
240
the bytecode properly. `Pydeinstaller <https://github.com/charles-dyfis-net/pydeinstaller>`_ may help with unpacking Pyinstaller bundlers.
246
241
247
242
Handling pathologically long lists of expressions or statements is
248
-
slow. We don't handle Cython_ or MicroPython which don't use bytecode.
243
+
slow. We don't handle Cython_ or MicroPython, which don't use bytecode.
249
244
250
245
There are numerous bugs in decompilation. And that's true for every
251
-
other CPython decompiler I have encountered, even the ones that
246
+
other CPython decompilers I have encountered, even the ones that
252
247
claimed to be "perfect" on some particular version like 2.4.
253
248
254
-
As Python progresses decompilation also gets harder because the
249
+
As Python progresses, decompilation also gets harder because the
255
250
compilation is more sophisticated and the language itself is more
256
251
sophisticated. I suspect that attempts there will be fewer ad-hoc
257
252
attempts like unpyc37_ (which is based on a 3.3 decompiler) simply
258
253
because it is harder to do so. The good news, at least from my
259
254
standpoint, is that I think I understand what's needed to address the
260
-
problems in a more robust way. But right now until such time as
261
-
project is better funded, I do not intend to make any serious effort
255
+
problems in a more robust way. But right now, until such time as
256
+
the project is better funded, I do not intend to make any serious effort
262
257
to support Python versions 3.8 or 3.9, including bugs that might come
263
258
in. I imagine at some point I may be interested in it.
264
259
@@ -271,16 +266,16 @@ there aren't that many people who have been working on bug fixing.
271
266
Some of the bugs in 3.7 and 3.8 are simply a matter of back-porting
272
267
the fixes in *decompyle3*. Any volunteers?
273
268
274
-
You may run across a bug, that you want to report. Please do so after
269
+
You may run across a bug that you want to report. Please do so after
275
270
reading `How to report a bug
276
271
<https://github.com/rocky/python-uncompyle6/blob/master/HOW-TO-REPORT-A-BUG.md>`_ and
277
272
follow the `instructions when opening an issue <https://github.com/rocky/python-uncompyle6/issues/new?assignees=&labels=&template=bug-report.md>`_.
278
273
279
274
Be aware that it might not get my attention for a while. If you
280
275
sponsor or support the project in some way, I'll prioritize your
281
276
issues above the queue of other things I might be doing instead. In
282
-
rare situtations, I can do a hand decompilation of bytecode for a fee.
283
-
However this is expansive, usually beyond what most people are willing
277
+
rare situations, I can do a hand decompilation of bytecode for a fee.
278
+
However, this is expensive, usually beyond what most people are willing
284
279
to spend.
285
280
286
281
See Also
@@ -290,13 +285,13 @@ See Also
290
285
* https://github.com/rocky/python-decompile3 : Much smaller and more modern code, focusing on 3.7 and 3.8. Changes in that will get migrated back here.
291
286
* https://code.google.com/archive/p/unpyc3/ : supports Python 3.2 only. The above projects use a different decompiling technique than what is used here. Currently unmaintained.
292
287
* https://github.com/figment/unpyc3/ : fork of above, but supports Python 3.3 only. Includes some fixes like supporting function annotations. Currently unmaintained.
293
-
* https://github.com/wibiti/uncompyle2 : supports Python 2.7 only, but does that fairly well. There are situations where :code:`uncompyle6` results are incorrect while :code:`uncompyle2` results are not, but more often uncompyle6 is correct when uncompyle2 is not. Because :code:`uncompyle6` adheres to accuracy over idiomatic Python, :code:`uncompyle2` can produce more natural-looking code when it is correct. Currently:code:`uncompyle2` is lightly maintained. See its issue `tracker <https://github.com/wibiti/uncompyle2/issues>`_ for more details.
288
+
* https://github.com/wibiti/uncompyle2 : supports Python 2.7 only, but does that fairly well. There are situations where :code:`uncompyle6` results are incorrect, while :code:`uncompyle2` results are not, but more often uncompyle6 is correct when uncompyle2 is not. Because :code:`uncompyle6` adheres to accuracy over idiomatic Python, :code:`uncompyle2` can produce more natural-looking code when it is correct. Currently:code:`uncompyle2` is lightly maintained. See its issue `tracker <https://github.com/wibiti/uncompyle2/issues>`_ for more details.
294
289
* `How to report a bug <https://github.com/rocky/python-uncompyle6/blob/master/HOW-TO-REPORT-A-BUG.md>`_
295
290
* The HISTORY_ file.
296
291
* https://github.com/rocky/python-xdis : Cross Python version disassembler
297
292
* https://github.com/rocky/python-xasm : Cross Python version assembler
298
-
* https://github.com/rocky/python-uncompyle6/wiki : Wiki Documents which describe the code and aspects of it in more detail
299
-
* https://github.com/zrax/pycdc : The README for this C++ code says it aims to support all versions of Python. You can aim your slign shot for the moon too, but I doubt you are going to hit it. This code is best for Python versions around 2.7 and 3.3 when the code was initially developed. Accuracy for current versions of Python3 and early versions of Python is lacking. Without major effort, it is unlikely it can be made to support current Python 3. See its `issue tracker <https://github.com/zrax/pycdc/issues>`_ for details. Currently lightly maintained.
293
+
* https://github.com/rocky/python-uncompyle6/wiki : Wiki Documents that describe the code and aspects of it in more detail
294
+
* https://github.com/zrax/pycdc : The README for this C++ code says it aims to support all versions of Python. You can aim your slingshot for the moon, too, but I doubt you are going to hit it. This code is best for Python versions around 2.7 and 3.3, when the code was initially developed. Accuracy for current versions of Python 3 and early versions of Python is lacking. Without major effort, it is unlikely that it can be made to support the current Python 3. See its `issue tracker <https://github.com/zrax/pycdc/issues>`_ for details. Currently lightly maintained.
0 commit comments