Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/palmr/classfile-parser
:coffee: A parser for Java Classfiles written in rust
https://github.com/palmr/classfile-parser
cargo classfile-parser java java-classfiles library parsing rust
Last synced: 13 days ago
JSON representation
:coffee: A parser for Java Classfiles written in rust
- Host: GitHub
- URL: https://github.com/palmr/classfile-parser
- Owner: Palmr
- License: mit
- Created: 2016-02-07T23:47:33.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2024-10-21T12:30:23.000Z (18 days ago)
- Last Synced: 2024-10-21T17:49:09.797Z (18 days ago)
- Topics: cargo, classfile-parser, java, java-classfiles, library, parsing, rust
- Language: Rust
- Homepage: https://crates.io/crates/classfile-parser
- Size: 186 KB
- Stars: 40
- Watchers: 4
- Forks: 17
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Java Classfile Parser
[![LICENSE](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE.txt)
![Rust](https://github.com/Palmr/classfile-parser/workflows/Rust/badge.svg)
[![Crates.io Version](https://img.shields.io/crates/v/classfile-parser.svg)](https://crates.io/crates/classfile-parser)A parser for [Java Classfiles](https://docs.oracle.com/javase/specs/jvms/se10/html/jvms-4.html), written in Rust using [nom](https://github.com/Geal/nom).
## Installation
Classfile Parser is available from crates.io and can be included in your Cargo enabled project like this:
```toml
[dependencies]
classfile-parser = "~0.3"
```## Usage
```rust
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"),
};
}
```## Implementation Status
- [x] Header
- [x] Magic const
- [x] Version info
- [x] Constant pool
- [x] Constant pool size
- [x] Constant types
- [x] Utf8
- [x] Integer
- [x] Float
- [x] Long
- [x] Double
- [x] Class
- [x] String
- [x] Fieldref
- [x] Methodref
- [x] InterfaceMethodref
- [x] NameAndType
- [x] MethodHandle
- [x] MethodType
- [x] InvokeDynamic
- [x] Access flags
- [x] This class
- [x] Super class
- [x] Interfaces
- [x] Fields
- [x] Methods
- [x] Attributes
- [x] Basic attribute info block parsing
- [ ] Known typed attributes parsing
- [x] Critical for JVM
- [x] ConstantValue
- [x] Code
- [x] StackMapTable
- [x] Exceptions
- [x] BootstrapMethods
- [ ] Critical for Java SE
- [ ] InnerClasses
- [ ] EnclosingMethod
- [ ] Synthetic
- [ ] Signature
- [ ] RuntimeVisibleAnnotations
- [ ] RuntimeInvisibleAnnotations
- [ ] RuntimeVisibleParameterAnnotations
- [ ] RuntimeInvisibleParameterAnnotations
- [ ] RuntimeVisibleTypeAnnotations
- [ ] RuntimeInvisibleTypeAnnotations
- [ ] AnnotationDefault
- [X] MethodParameters
- [ ] Useful but not critical
- [x] SourceFile
- [ ] SourceDebugExtension
- [ ] LineNumberTable
- [ ] LocalVariableTable
- [ ] LocalVariableTypeTable
- [ ] Deprecated