11 个版本
使用旧的 Rust 2015
0.3.7 | 2023年6月21日 |
---|---|
0.3.6 | 2023年6月2日 |
0.3.5 | 2021年7月12日 |
0.3.4 | 2018年12月30日 |
0.2.1 | 2017年6月30日 |
#537 in 解析器实现
每月 29 次下载
55KB
1.5K SLoC
Java 类文件解析器
使用 Rust 和 nom 编写的 Java 类文件 解析器。
安装
Classfile 解析器可在 crates.io 获取,并可以像这样包含在您的 Cargo 启用项目中
[dependencies]
classfile-parser = "~0.3"
使用方法
extern crate classfile_parser;
use classfile_parser::class_parser;
fn main() {
let classfile_bytes = include_bytes!("../path/to/JavaClass.class");
match class_parser(classfile_bytes) {
Ok((_, class_file)) => {
println!(
"version {},{} \
const_pool({}), \
this=const[{}], \
super=const[{}], \
interfaces({}), \
fields({}), \
methods({}), \
attributes({}), \
access({:?})",
class_file.major_version,
class_file.minor_version,
class_file.const_pool_size,
class_file.this_class,
class_file.super_class,
class_file.interfaces_count,
class_file.fields_count,
class_file.methods_count,
class_file.attributes_count,
class_file.access_flags
);
}
Err(_) => panic!("Failed to parse"),
};
}
实现状态
- 头文件
- 魔数常量
- 版本信息
- 常量池
- 常量池大小
- 常量类型
- Utf8
- 整数
- 浮点数
- 长整型
- 双精度浮点数
- 类
- 字符串
- 字段引用
- 方法引用
- 接口方法引用
- 名称和类型
- 方法句柄
- 方法类型
- InvokeDynamic
- 访问标志
- 此类
- 父类
- 接口
- 字段
- 方法
- 属性
- 基本属性信息块解析
- 已知类型属性解析
- 对 JVM 至关重要
- 常量值
- 代码
- 栈映射表
- 异常
- BootstrapMethods
- 对 Java SE 至关重要
- 内部类
- 封装方法
- 合成
- 签名
- 运行时可见注解
- 运行时不可见注解
- 运行时可见参数注解
- 运行时不可见参数注解
- 运行时可见类型注解
- 运行时不可见类型注解
- AnnotationDefault
- 方法参数
- 有用但不重要
- 源文件
- 源调试扩展
- 行号表
- 局部变量表
- 局部变量类型表
- 已弃用
- 对 JVM 至关重要
依赖项
~1MB
~21K SLoC