#marshal #python #pretty-print #parser

bin+lib marshal-parser

Python "marshal" 序列化格式的解析器

2 个版本

0.1.1 2024年6月15日
0.1.0 2024年6月13日

1059解析实现

Download history 100/week @ 2024-06-08 147/week @ 2024-06-15 8/week @ 2024-06-22 36/week @ 2024-06-29 39/week @ 2024-07-27

67 每月下载次数

MIT 许可证

115KB
902

Python "marshal" 序列化格式的解析器

这是一个将 Python 的 marshalparser 项目移植到 Rust 的项目,该项目是用 Python 编写的。

它提供了命令行界面和库接口,用于解析 Python 内部 "marshal" 序列化格式中的数据,以及用于格式化打印结果数据结构的函数,还有一些基本的数据操作,例如,删除未使用的引用标志,以使 pyc 文件更具可重复性。

默认功能集故意保持最小。可以通过 cli 标志启用仅用于构建命令行界面的依赖项。可以通过 fancy 功能启用字节字符串的格式化打印。

该项目支持解析 CPython 3.8 到 3.13 版本生成的 "marshal" 数据。


lib.rs:

CPython 使用的 "marshal" 二进制反序列化格式的解析器

此包实现了用于读取 CPython 内部使用的 "marshal" 反序列化格式的文件解析器和一些实用工具。确切的格式不稳定,可能在 CPython 的不同小版本之间发生变化。

此包支持解析由 CPython 版本 >= 3.6< 3.14 编写的 "marshal" 快照和 pyc 文件。

根据对底层数据结构的访问需求,提供高级和低级 API。低级 API 提供更多灵活性,因为它不需要文件,但可以在纯字节上操作 (Vec<u8>)。

从磁盘读取 pyc 文件

use marshal_parser::{MarshalFile, Object};

let pyc = MarshalFile::from_pyc_path("mod.cpython-310.pyc").unwrap();
let object: Object = pyc.into_inner();

读取 "marshal" 快照(即没有 pyc 标头的文件)

use marshal_parser::{MarshalFile, Object};

let dump = MarshalFile::from_dump_path("dump.marshal", (3, 11)).unwrap();
let object: Object = dump.into_inner();

依赖项

~0.7–1.5MB
~33K SLoC