Skip to main content

hex_patch/asm/
assembler.rs

1use 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}