Python 3字节码格式

时间:2016-04-08 21:05:38

标签: python python-3.x python-3.4 bytecode

我想阅读.pyc文件。但是,我找不到关于格式的任何文档。

{3}}对Python 3不起作用(尽管它适用于Python 2):

>>> f = open('__pycache__/foo.cpython-34.pyc', 'rb')
>>> f.read(4)
b'\xee\x0c\r\n'
>>> f.read(4)
b'\xf8\x17\x08W'
>>> marshal.load(f)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: bad marshal data (unknown type code)

marshal只消耗一个字节:\x00,这确实不是马歇尔的有效第一个字符(作为比较,同一个空模块的Python 2字节码的第一个字节是c)< / p>

那么,如何解码标题之后的内容呢?

2 个答案:

答案 0 :(得分:3)

试试这个。它工作了一段时间。他们在v3中添加了另一个int32。

def load_file(self, source):
    if isinstance(source, str):
        import os.path
        if not os.path.exists(source):
            raise IOError("Cannot load_file('"
                + source
                + "'): does not exist")
        with open(source, "rb") as fh:
            header_bytes = fh.read(12)
            # ignore header
            self.code = marshal.load(fh)

        return self.code

答案 1 :(得分:0)

你看过这个骗子吗? https://docs.python.org/3/library/dis.html