检查 pickle 文件的 pickle 协议

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

我了解到在 python3 中有 5 种不同的 pickle 文件协议(Link)。 我想知道如何从泡菜文件中获取元数据信息(特别是协议)。

python pickle
2个回答
2
投票

基于 Python 3.8 中的 pickle 源代码和一些实验,通过查看前 2 个字节很容易获得版本号 2 及更高版本。第一个记录为:

PROTO = b'\x80' # identify pickle protocol

在上面的文件中,可以通过以下方式进行测试:

' '.join(f'{c:02x}' for c in pickle.dumps(42, protocol=2))

这给了我:

80 02 4b 2a 2e

即一个字节 (0x80) 表示我们即将获得一个版本号,然后是版本号 2。如果我们使用更新的版本号运行它,它会适当地更改,即版本 5 给出:

80 05 4b 2a 2e

这看起来很简单。较低的版本号似乎没有报告任何内容,但也许其他人会提出一些建议!


0
投票
import pickletools pickle_file = 'C:\Users\stephen\Documents\somefile.pickle' with open(pickle_file, 'rb') as f: opcodeinfo_generator = pickletools.genops(f) print(f'pickle protocol: {next(opcodeinfo_generator)[1]}')
    
© www.soinside.com 2019 - 2024. All rights reserved.