2016-12-31 2 views
0

Anhebung Bei dem Versuch, einen Kollegen von diesem Posten Decompile *.pyc file using uncompyle2 zu helfen, ich die folgenden Fehler aufgetreten, wenn sie versucht * zu dekompilieren .pyc mit uncompyle6, wird der Fehler wie folgt:uncompyle6 einen Parse-Fehlers beim decompile a * .pyc Datei

File "/usr/local/lib/python2.7/site-packages/uncompyle6/semantics/pysource.py", line 2231, in build_ast 
    raise ParserError(e, tokens) 
uncompyle6.semantics.parser_error.ParserError: --- This code section failed: --- 

    2  0 JUMP_ABSOLUTE  120 'to 120' 
      3 SETUP_WITH   364 'to 370' 
      6 STOP_CODE 
      7 JUMP_ABSOLUTE  168 'to 168' 
      10 SETUP_WITH  22357 'to 22370' 
      13 LOAD_CONST   2 '' 
      16 LOAD_CONST   2 '' 
      19 POP_TOP 
      20 RETURN_VALUE 
      -1 RETURN_LAST 

Parse error at or near `SETUP_WITH' instruction at offset 3 
+0

Dieser Bytecode macht absolut keinen Sinn. Sind Sie sicher, dass Sie keinen willkürlichen Teil der Bytes haben? –

+0

woher weiß ich das, wie ich nur die p-codes sehe, in der tat habe ich nicht die ursprüngliche quelle! Wie ich schon sagte, der kerl schickte mir nur die .pyc-datei, oder ist verschleiert? –

+0

Vielleicht ist die Datei beschädigt oder komprimiert? Schwer zu sagen aus einem Ausschnitt ungültiger Dekompilierung. –

Antwort

0

Sie scheinen zu versuchen, ein Stück beliebige Daten zu dekompilieren (dekomprimieren py le). Sie haben keinen gültigen Bytecode dort, nicht für einen normalen Python-Interpreter.

JUMP_ABSOLUTE wird verwendet, um zum Anfang von Schleifen zurückzuspringen. Es wird nicht mit with Anweisungen verwendet, die der SETUP_WITH Opcode behandelt. Die Sprünge sind wahrscheinlich außerhalb des Codeblocks und in diesem Fall vorwärts anstatt zurück, so uncompile6 ist dies richtig als ungültig zu kennzeichnen.

Es besteht die Möglichkeit, dass der Bytecode verschleiert wurde, wobei die Bytecode-Bedeutung von ihren normalen Positionen abweicht. Bytecode ist nur eine Folge von Bytes, wobei jedes Byte eine bestimmte Bedeutung hat (zusammen mit Operandenwerten). Der Dropbox-Python-Interpreter zum Beispiel hat diese Tabelle signifikant verändert, um den gelegentlichen neugierigen Ingenieur davon abzuhalten, sich ihren Code anzuschauen (pydecompyle6 kompensiert dies).

+0

oh danke für die Erklärung, ich denke du hast auch gerade meinen obigen Kommentar beantwortet :)! –