simple/
simple.rs

1use formatic::{Arch, BinFormat, Decl, Endian, Link, ObjectBuilder, Scope};
2
3pub fn main() -> Result<(), Box<dyn std::error::Error>> {
4    let mut obj = ObjectBuilder::new("test.o");
5
6    obj.decls(vec![
7        ("callme", Decl::Function(Scope::Import)),
8        ("call", Decl::Function(Scope::Export)),
9        ("data", Decl::Data(Scope::Export)),
10    ]);
11
12    obj.define(
13        "call",
14        vec![
15            0xF3, 0x0F, 0x1E, 0xFA,         // endbr64
16            0x55,                           // push rbp
17            0x48, 0x89, 0xE5,               // mov rbp, rsp
18            0xE8, 0x00, 0x00, 0x00, 0x00,   // call callme
19            0x5D,                           // pop rbp
20            0xC3,                           // ret
21        ],
22    );
23
24    obj.define("data", 
25        b"Hello World".into()
26    );
27
28    obj.link(Link {
29        from: "call".into(),
30        to: "callme".into(),
31        at: 9,
32    });
33
34    obj.write(BinFormat::host(), Arch::host(), Endian::host())?;
35
36    Ok(())
37}