为什么Python无法反汇编此.pyc文件?

问题描述 投票:0回答:1

我在test.py中编写了基本的Python代码

print("Hello World")

然后,我使用此代码进行编译并生成了.pyc文件。我现在有。py。pyc文件。

python -m compileall

现在,我将dis模块用于反汇编python字节码,但是.pyc文件无法工作,而.py文件却可以工作。

enter image description here

为什么不能删除pyc字节码文件,而py文件可以在编译并生成字节码后取消显示(.py->(compile)->字节码)?

我的pyc文件:

B

hAı]   ã               @   s   e d ƒ dS )zHello WorldN)Úprint© r   r   ú"C:\Users\ismet\Desktop\deneme\a.pyÚ<module>   s   

enter image description here

谢谢。

python python-3.x bytecode
1个回答
2
投票

虽然dis.dis函数同时支持源代码字符串和原始字节码序列作为输入,但是dis模块作为主程序(这是您使用的方式)仅支持源文件名代码作为输入。

由于pyc文件的结构以4个字节的编组版本号,4个字节的修改时间戳记以及marshal.dump方法中的原始字节码转储开始,所以根据Ned Batchelder的出色article,您可以在查找索引8的文件位置后,请使用marshal.loadpyc文件中还原原始字节码。但是,当Ned撰写本文时,此标头大小的确对Python 2有意义。作为@OndrejK。通过引用PEP-552在注释中指出,从Python 3.7以及Python 3.0和Python 3.6之间的f.seek(16)开始,您将必须执行f.seek(12)

import dis
import marshal

with open('a.pyc', 'rb') as f:
    f.seek(16)
    dis.dis(marshal.load(f))
© www.soinside.com 2019 - 2024. All rights reserved.