hex_patch/asm/
assembler.rs1use std::error::Error;
2
3use crate::headers::encoder::Encoder;
4use crate::headers::Header;
5use rbpf::assembler;
6
7pub fn assemble(
8 asm: &str,
9 starting_virtual_address: u64,
10 header: &Header,
11) -> Result<Vec<u8>, Box<dyn Error>> {
12 let encoder = header
13 .get_encoder()
14 .map_err(|e| t!("errors.create_encoder", e = e))?;
15
16 let out: Vec<u8> = match encoder {
17 Encoder::Keystone(keystone) => {
18 keystone
19 .asm(asm.to_string(), starting_virtual_address)
20 .map_err(|e| t!("errors.assemble", e = e))?
21 .bytes
22 }
23 Encoder::EBPF => assembler::assemble(asm).map_err(|e| t!("errors.assemble", e = e))?,
24 };
25
26 Ok(out)
27}