将python字节代码转换为常规python代码

2024-05-14 06:37:27 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将以下字节码转换为普通python代码?我通过反编译一个pyc文件得到了这段代码。一些代码被反编译为其原始代码,但大多数没有。知道我怎样才能把这个字节码转换成它的源代码吗

L. 174       396  BUILD_LIST_0          0
             398  STORE_FAST               'javascripts'

L. 177       400  SETUP_LOOP          490  'to 490'
             402  LOAD_GLOBAL              range
             404  LOAD_CONST               0
             406  LOAD_GLOBAL              len
             408  LOAD_FAST                'incident_tags'
             410  CALL_FUNCTION_1       1  '1 positional argument'
             412  CALL_FUNCTION_2       2  '2 positional arguments'
             414  GET_ITER
             416  FOR_ITER            488  'to 488'
             418  STORE_FAST               'i'

L. 178       420  LOAD_GLOBAL              str
             422  LOAD_FAST                'incident_tags'
             424  LOAD_FAST                'i'
             426  BINARY_SUBSCR
             428  LOAD_ATTR                text
             430  CALL_FUNCTION_1       1  '1 positional argument'
             432  LOAD_GLOBAL              list_of_incidents
             434  COMPARE_OP               not-in
         436_438  POP_JUMP_IF_FALSE   462  'to 462'

L. 179       440  LOAD_FAST                'javascripts'
             442  LOAD_METHOD              append
             444  LOAD_FAST                'incident_tags'
             446  LOAD_FAST                'i'
             448  BINARY_SUBSCR
             450  LOAD_METHOD              get_attribute
             452  LOAD_STR                 'href'
             454  CALL_METHOD_1         1  '1 positional argument'
             456  CALL_METHOD_1         1  '1 positional argument'
             458  POP_TOP
             460  JUMP_BACK           416  'to 416'
           462_0  COME_FROM           436  '436'

L. 181       462  LOAD_GLOBAL              print
             464  LOAD_STR                 'Ignore '
             466  LOAD_FAST                'incident_tags'
             468  LOAD_FAST                'i'
             470  BINARY_SUBSCR
             472  LOAD_ATTR                text
             474  BINARY_ADD
             476  LOAD_STR                 '. It is already completed.'
             478  BINARY_ADD
             480  CALL_FUNCTION_1       1  '1 positional argument'
             482  POP_TOP
         484_486  JUMP_BACK           416  'to 416'
             488  POP_BLOCK
           490_0  COME_FROM_LOOP      400  '400'

L. 184   490_492  SETUP_LOOP         3694  'to 3694'
             494  LOAD_GLOBAL              range
             496  LOAD_CONST               0
             498  LOAD_GLOBAL              len
             500  LOAD_FAST                'javascripts'
             502  CALL_FUNCTION_1       1  '1 positional argument'
             504  CALL_FUNCTION_2       2  '2 positional arguments'
             506  GET_ITER
           508_0  COME_FROM           636  '636'
         508_510  FOR_ITER           3692  'to 3692'
             512  STORE_FAST               'i'

L. 187       514  LOAD_FAST                'self'
             516  LOAD_ATTR                driver
             518  LOAD_METHOD              execute_script
             520  LOAD_FAST                'javascripts'
             522  LOAD_FAST                'i'
             524  BINARY_SUBSCR
             526  CALL_METHOD_1         1  '1 positional argument'
             528  POP_TOP

L. 189       530  LOAD_GLOBAL              time
             532  LOAD_METHOD              sleep
             534  LOAD_CONST               1
             536  CALL_METHOD_1         1  '1 positional argument'
             538  POP_TOP

Tags: to代码tagsloadfunctioncallargumentpop
1条回答
网友
1楼 · 发布于 2024-05-14 06:37:27

我建议您使用uncompyle6模块。(您需要原始的.pyc.pyo文件)。要安装,请运行

~$ pip install uncompyle6

然后,要反编译任何Python字节码文件,请运行

~$ uncompyle6 path/to/bytecode/file.pyc

有关所有可用选项的概述,请运行

~$ uncompyle6 -h

它支持从2.4到3.8的所有Python版本。你可以在https://github.com/rocky/python-uncompyle6找到项目的主页

相关问题 更多 >