2016-12-31 2725 views
0

雖然想幫資深會員,從這個帖子Decompile *.pyc file using uncompyle2,我遇到試圖反編譯* .pyc文件使用uncompyle6如果出現以下錯誤,該錯誤如下:uncompyle6提高解析錯誤,而反編譯一個* .pyc文件文件

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

該字節碼絕對沒有意義。你確定你沒有任意的字節塊嗎? –

+0

我怎麼知道,因爲我只是看到了P代碼,實際上我沒有原始的源代碼!正如我所說的那樣,這個傢伙只是給我發送了.pyc文件,或者是被混淆了? –

+0

也許文件被破壞或壓縮?很難從無效反編譯的片斷中說出來。 –

回答

0

您似乎試圖反編譯(分解py le)一塊任意數據。您沒有任何有效的字節碼,而不是普通的Python解釋器。

JUMP_ABSOLUTE用於跳回循環的開始。它不與with語句一起使用,這是SETUP_WITH操作碼處理的內容。跳轉可能在代碼塊之外,在這種情況下,轉發而不是後退,因此uncompile6正確地將其標記爲無效。

字節碼有可能是混淆,其中字節碼的含義從其正常位置改變。字節碼只是一個字節序列,每個字節給出了特定的含義(連同操作數值)。例如,Dropbox Python解釋器已經大幅改變了該表,試圖阻止偶然好奇的工程師查看他們的代碼(pydecompyle6補償這一點)。

+0

哦!謝謝你的解釋,我想你也只是回答我上面的評論:)! –