java-asm
Java bytecode reader & writer, maybe a rust implementation for ASM
There are some similar projects in GitHub, but they didn't actually implement all JVM Bytecode format, and also not implements all ASM nodes/features in rust. So I want to build this library to fully read and write Java bytecode information.
This project supports much newer LTS Java version(Java 21 currently) than other rust implementations. Only supports
asm-tree
api currently, not supports visitor api because Tree API is much easier to use than visitor api.
Current Stage
After version 0.0.6, you can try to use ClassNode::from_jvms
to read a class file into a ClassNode
,
and it is pretty useful to now, check tests in this project to
see some examples.
- Implement Read Java class file with JVMS format
- Implement Write Java class file with JVMS format
- WIP,
ClassNode
reader- Constant pool
- Attributes
- Class / Field / Method metadata
- Method instructions
- Method frames (read as an attribute is available, need a better format)
- Method local variables / stacks / try-catches (read as an attribute is available, need a better format)
- Not Start, Nodes writer (low priority currently)
- Append constant pool if needed
- Write back attributes into Class / Field / Method / Code
- Method frames
- Not Start, Implement ASM features (eg. auto calculate frame/stack etc.)
- Smali liked output.
- Dex interop. (https://source.android.com/docs/core/runtime/dex-format)
Goals
- Fully read and write Java class file with JVMS format.
- Partially implement ASM features in rust, but provides some better operations in rust.
- Support much newer Java version (higher priority for LTS, Java 21 currently).
- Not depends on any of other rust libraries at runtime, build everything from std only. (but some proc marco's
dependencies are used for generate some template codes. e.g.
quote
andsyn
)
Some similar projects:
- rjvm
- read jvm bytecode and run it in a rust vm
- support JVM7
- jvm-assembler
- Ka-Pi
- cfsp