gpt4 book ai didi

python - 为什么 Python dis 模块无法反汇编这个 .pyc 文件?

转载 作者:行者123 更新时间:2023-12-01 00:14:15 26 4
gpt4 key购买 nike

我在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

现在谢谢。

最佳答案

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

由于 pyc 文件的结构以 4 个字节的编码版本号、4 个字节的修改时间戳以及来自 marshal.dump 的原始字节码转储开始> 方法,根据 Ned Batchelder 的优秀文章 article ,在查找索引 8 的文件位置后,您可以使用 marshal.loadpyc 文件恢复原始字节码。但是,这个 header 大小实际上是为 Python 设计的2 内德写这篇文章时。正如@OndrejK。通过引用 PEP-552 在评论中指出,从 Python 3.7 开始,您必须执行 f.seek(16),而在 Python 3.0 和 Python 3.6 之间则必须执行 f.seek(12):

import dis
import marshal

with open('a.pyc', 'rb') as f:
f.seek(16)
dis.dis(marshal.load(f))

关于python - 为什么 Python dis 模块无法反汇编这个 .pyc 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59431770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com