3 releases (breaking)

0.3.0 Apr 19, 2024
0.2.0 Mar 1, 2024
0.1.0 Feb 28, 2024

#895 in Parser implementations

MIT license

150KB
3.5K SLoC

rjvm

rjvm is a Rust crate that enables parsing of JVM class files. This crate supports Java at least up to Java SE 21. The scope of this crate is not to create a JVM, but to parse and write (in the future) JVM class files.

Getting Started

To integrate rjvm into you project, simply add it as a dependency to your Cargo.toml file:

[dependencies]
rjvm = "0.1.0"

To parse a class file, follow these steps:

  • Read the class file into a byte array
  • Create a BufferedReader from the byte array
  • Initialize a mutable ConstantPool to store the constant pool entries
  • Parse the ClassFile using the ClassFile::decode method.
let file = include_bytes!("../path/to/your/class/file.class");
let mut buffer = rjvm::decoder::BufferedReader::new(file);
let mut constant_pool = rjvm::types::constants::ConstantPool::new();
let class_file = rjvm::types::elements::ClassFile::decode(&mut buffer, &mut constant_pool);

Examples

Find some simple examples on how to use rjvm in the examples directory of this repository.

  • decoding.rs: shows an example of how to parse a class file.
  • instructions.rs: shows an example of how to parse a class file and print all methods with their instructions.

Roadmap

  • Parse class files with all related elements
  • Manage constant pools
  • Read JAR files
  • Write class files

Dependencies

~110KB