| Crates.io | jasm-assembler |
| lib.rs | jasm-assembler |
| version | 0.0.0 |
| created_at | 2025-10-16 03:50:29.39844+00 |
| updated_at | 2025-10-16 03:50:29.39844+00 |
| description | 支持 jvm 指令集的现代汇编器 - 强类型、面向对象、零依赖核心 |
| homepage | https://gaia-assembly.netlify.app/backends/jvm/ |
| repository | https://github.com/nyar-vm/project-gaia |
| max_upload_size | |
| id | 1885358 |
| size | 209,124 |
一个功能完整的 JVM 字节码操作库,支持汇编、反汇编和类文件操作。
.class、.jasm 和 JCOD 格式use jvm_assembler::formats::jasm::converter::convert_jasm_to_jvm;
use jvm_assembler::formats::class::writer::ClassWriter;
let jasm_code = r#"
.class public HelloWorld
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit stack 2
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "Hello, World!"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
return
.end method
"#;
let program = convert_jasm_to_jvm(jasm_code)?;
let buffer = Vec::new();
let writer = ClassWriter::new(buffer);
let class_bytes = writer.write(program)?;
std::fs::write("HelloWorld.class", class_bytes)?;
Ok(())
#### 高级用法
```rust
use jvm_assembler::formats::class::writer::ClassWriter;
use jvm_assembler::program::{JvmProgram, JvmMethod, JvmField};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建新的 JVM 程序
let mut program = JvmProgram::new("Example".to_string());
// 添加方法和字段
program.add_method(JvmMethod::new("main".to_string(), "([Ljava/lang/String;)V".to_string()));
program.add_field(JvmField::new("count".to_string(), "I".to_string()));
// 写入类文件
let buffer = Vec::new();
let writer = ClassWriter::new(buffer);
let class_bytes = writer.write(program)?;
std::fs::write("Example.class", class_bytes)?;
Ok(())
}
use jvm_assembler::formats::jasm::converter::convert_jasm_to_jvm;
let jasm_code = r#"
.class public HelloWorld
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit stack 2
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "Hello, World!"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
return
.end method
"#;
let program = convert_jasm_to_jvm(jasm_code)?;
// 这里需要将 program 转换为类文件字节码
// let class_bytes = /* 转换逻辑 */;
// std::fs::write("HelloWorld.class", class_bytes)?;
use jvm_assembler::formats::class::writer::ClassWriter;
use jvm_assembler::program::{JvmProgram, JvmMethod, JvmField};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建新的 JVM 程序
let mut program = JvmProgram::new("Example".to_string());
// 添加方法和字段
program.add_method(JvmMethod::new("main".to_string(), "([Ljava/lang/String;)V".to_string()));
program.add_field(JvmField::new("count".to_string(), "I".to_string()));
// 写入类文件
let buffer = Vec::new();
let writer = ClassWriter::new(buffer);
let class_bytes = writer.write(program)?;
std::fs::write("Example.class", class_bytes)?;
Ok(())
}
所有操作都返回 Result<T, GaiaError>,提供详细的错误信息:
use jvm_assembler::formats::jasm::converter::convert_jasm_to_jvm;
let jasm_code = "invalid jasm code";
match convert_jasm_to_jvm(jasm_code) {
Ok(program) => {
println!("转换成功");
}
Err(e) => {
eprintln!("转换失败: {}", e);
}
}