#java-class #java #class #parser #classfile

classfile-parser

用 Rust 编写的 Java 类文件解析器

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 次下载

MIT 许可证

55KB
1.5K SLoC

Java 类文件解析器

LICENSE Rust Crates.io Version

使用 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
        • 方法参数
      • 有用但不重要
        • 源文件
        • 源调试扩展
        • 行号表
        • 局部变量表
        • 局部变量类型表
        • 已弃用

依赖项

~1MB
~21K SLoC