3 个不稳定版本
使用旧的 Rust 2015
0.2.1 | 2018 年 6 月 17 日 |
---|---|
0.2.0 | 2015 年 7 月 28 日 |
0.1.0 | 2015 年 7 月 24 日 |
#2457 in 解析器实现
79KB
1.5K SLoC
classreader
解析 Java 虚拟机 8 版本使用的 类文件格式。
概要
extern crate classreader;
use classreader::ClassReader;
use std::fs::File;
pub fn main() {
let mut file = File::open("pkg/Test.class").unwrap();
let class = ClassReader::new_from_reader(file).unwrap();
assert_eq!(0xCAFEBABE, class.magic);
}
classreader 使用 log crate 输出一些日志信息。这些信息主要用于低级调试。
完整性
无问题地解析了 OpenJDK 8 的整个 rt.jar。代码尚未解码。除此之外,所有内容都已解析到合适的数据结构中。
问题
类文件常量池中的字符串目前解析为 Rust 的 String
。似乎类文件可能包含代理对的代码点。这些在 UTF-8 编码的字符串中是无效的,而 Rust 使用 UTF-8。因此,每当解码这样的代码点时,它会被替换为 Unicode 替换字符 U+FFFD。这种情况很少发生,但确实会发生。会输出一个带有 info 级别的日志信息。
许可证
Apache 许可证版本 2。请参阅 LICENSE 以获取文本。
依赖项
~165KB