use dynasmrt::{DynasmApi, DynasmLabelApi};
fn main() {
let mut ops = dynasmrt::x64::Assembler::new().unwrap();
let hello_world = "hello, world!";
dynasm!(ops
; .arch x64
; ->hello:
; .bytes hello_world.as_bytes()
);
println!("before");
let hello = ops.offset();
dynasm!(ops
; .arch x64
; mov rax, 1
; mov rdi, 1
; mov rsi, [-> hello]
; mov rdx, 12
; syscall
; ret
);
println!("after");
let buf = ops.finalize().unwrap();
let hello_fn: extern "sysv64" fn() = unsafe { std::mem::transmute(buf.ptr(hello)) };
hello_fn();}
actual output:
before
after
expected output: a 'hello world' between the before/after