Expand description
§x86_64-assembler
支持 x64 和 x86 指令集的现代汇编器 - 强类型、面向对象、零依赖核心
§功能特性
- 强类型设计: 使用 Rust 的类型系统确保汇编代码的正确性
- 双架构支持: 同时支持 x86 和 x86_64 架构
- 零依赖核心: 核心功能不依赖外部库,保证轻量和可靠性
- 完整的指令集: 支持常用的 x86/x86_64 指令,包括数据传输、算术运算、控制流等
- 灵活的 API: 提供高级构建器 API 和底层编码/解码 API
- 错误处理: 完善的错误处理机制,提供清晰的错误信息
§核心组件
§1. X86_64Assembler - 主汇编器
主入口点,提供编码和解码功能:
use x86_64_assembler::X86_64Assembler;
use gaia_types::helpers::Architecture;
let assembler = X86_64Assembler::new(Architecture::X86_64)?;§2. ProgramBuilder - 程序构建器
高级 API,用于构建汇编程序:
use x86_64_assembler::builder::ProgramBuilder;
use x86_64_assembler::instruction::Register;
let mut builder = ProgramBuilder::new(Architecture::X86_64);
builder
.mov_reg_imm(Register::RAX, 42)?
.push_reg(Register::RAX)?
.call("my_function")?
.ret()?;§3. Instruction - 指令定义
完整的指令枚举,支持:
- 数据传输:
MOV,PUSH,POP - 算术运算:
ADD,SUB - 控制流:
CALL,RET - 其他:
LEA,NOP
§4. 寄存器支持
完整的寄存器枚举,包括:
- 8位寄存器:
AL,CL,DL,BL,AH,CH,DH,BH - 16位寄存器:
AX,CX,DX,BX,SP,BP,SI,DI - 32位寄存器:
EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI - 64位寄存器:
RAX,RCX,RDX,RBX,RSP,RBP,RSI,RDI - 扩展寄存器:
R8-R15及其子寄存器
§5. 操作数类型
支持多种操作数类型:
- 寄存器操作数:
Operand::Reg(Register::RAX) - 立即数操作数:
Operand::imm(42, 64) - 内存操作数:
Operand::mem(Some(Register::RAX), None, 1, 0) - 标签操作数:
Operand::label("my_label")
§使用示例
§基本用法
use x86_64_assembler::{X86_64Assembler, instruction::{Instruction, Operand, Register}};
use gaia_types::helpers::Architecture;
// 创建汇编器
let assembler = X86_64Assembler::new(Architecture::X86_64)?;
// 构建指令
let instruction = Instruction::Mov {
dst: Operand::Reg(Register::RAX),
src: Operand::imm(42, 64),
};
// 编码指令
let bytes = assembler.encode(&instruction)?;
println!("编码结果: {:?}", bytes);
// 解码字节码
let decoded = assembler.decode(&bytes)?;
println!("解码结果: {:?}", decoded);§使用构建器
use x86_64_assembler::builder::ProgramBuilder;
use x86_64_assembler::instruction::Register;
use gaia_types::helpers::Architecture;
let mut builder = ProgramBuilder::new(Architecture::X86_64);
// 构建一个简单的函数
builder
.mov_reg_imm(Register::RAX, 10)? // mov rax, 10
.mov_reg_imm(Register::RDX, 20)? // mov rdx, 20
.add_reg_imm(Register::RAX, 5)? // add rax, 5
.push_reg(Register::RAX)? // push rax
.call("print_number")? // call print_number
.add_reg_imm(Register::RSP, 8)? // add rsp, 8 (清理栈)
.ret()?; // ret
// 编译为字节码
let code = builder.compile_instructions()?;
println!("生成的机器码: {:?}", code);§内存操作
use x86_64_assembler::instruction::{Operand, Register};
// 创建内存操作数
let mem_op = Operand::mem(
Some(Register::RAX), // 基址寄存器
Some(Register::RBX), // 索引寄存器
4, // 比例因子
16 // 位移
);
// 等价于: [rax + rbx*4 + 16]§架构支持
项目支持两种架构:
Architecture::X86: 32位 x86 架构Architecture::X86_64: 64位 x86_64 架构
可以通过以下方式设置架构:
let mut assembler = X86_64Assembler::new(Architecture::X86)?;
assembler.set_architecture(Architecture::X86_64)?;§错误处理
所有操作都返回 Result<T, GaiaError>,提供详细的错误信息:
match X86_64Assembler::new(Architecture::ARM) {
Ok(assembler) => { /* 成功创建 */ }
Err(error) => {
println!("不支持的架构: {}", error);
}
}§模块结构
builder: 程序构建器模块,提供便捷的 API 来构建汇编程序decoder: 指令解码器模块,用于将字节码解码为指令encoder: 指令编码器模块,用于将指令编码为字节码instruction: 指令定义模块,包含寄存器、操作数和指令的定义
§许可证
本项目采用 MPL-2.0 许可证开源。
§贡献
欢迎提交 Issue 和 Pull Request 来改进这个项目!
§相关链接
Modules§
- builder
- ProgramBuilder 模块
- decoder
- InstructionDecoder 模块
- encoder
- InstructionEncoder 模块
- instruction
- Instruction 模块
Structs§
- X86_
64Assembler - x86_64汇编器主结构体