2 个版本
0.1.1 | 2024年6月15日 |
---|---|
0.1.0 | 2024年6月13日 |
1059 在 解析实现
67 每月下载次数
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