Skip to content

Instantly share code, notes, and snippets.

@camas
Created December 6, 2021 14:13
Show Gist options
  • Save camas/1c819e0efb8beae654c8b349407c7b71 to your computer and use it in GitHub Desktop.
Save camas/1c819e0efb8beae654c8b349407c7b71 to your computer and use it in GitHub Desktop.
Linux x64 syscall asm in Rust
pub unsafe fn syscall0(n: isize) -> isize {
let mut ret: isize;
asm!(
"syscall",
in("rax") n,
out("rcx") _,
out("r11") _,
lateout("rax") ret,
);
ret
}
pub unsafe fn syscall1(n: isize, a1: isize) -> isize {
let mut ret: isize;
asm!(
"syscall",
in("rax") n,
in("rdi") a1,
out("rcx") _,
out("r11") _,
lateout("rax") ret,
);
ret
}
pub unsafe fn syscall2(n: isize, a1: isize, a2: isize) -> isize {
let mut ret: isize;
asm!(
"syscall",
in("rax") n,
in("rdi") a1,
in("rsi") a2,
out("rcx") _,
out("r11") _,
lateout("rax") ret,
);
ret
}
pub unsafe fn syscall3(n: isize, a1: isize, a2: isize, a3: isize) -> isize {
let mut ret: isize;
asm!(
"syscall",
in("rax") n,
in("rdi") a1,
in("rsi") a2,
in("rdx") a3,
out("rcx") _,
out("r11") _,
lateout("rax") ret,
);
ret
}
pub unsafe fn syscall4(n: isize, a1: isize, a2: isize, a3: isize, a4: isize) -> isize {
let mut ret: isize;
asm!(
"syscall",
in("rax") n,
in("rdi") a1,
in("rsi") a2,
in("rdx") a3,
in("r10") a4,
out("rcx") _,
out("r11") _,
lateout("rax") ret,
);
ret
}
pub unsafe fn syscall5(n: isize, a1: isize, a2: isize, a3: isize, a4: isize, a5: isize) -> isize {
let mut ret: isize;
asm!(
"syscall",
in("rax") n,
in("rdi") a1,
in("rsi") a2,
in("rdx") a3,
in("r10") a4,
in("r8") a5,
out("rcx") _,
out("r11") _,
lateout("rax") ret,
);
ret
}
pub unsafe fn syscall6(
n: isize,
a1: isize,
a2: isize,
a3: isize,
a4: isize,
a5: isize,
a6: isize,
) -> isize {
let mut ret: usize;
asm!(
"syscall",
in("rax") n,
in("rdi") a1,
in("rsi") a2,
in("rdx") a3,
in("r10") a4,
in("r8") a5,
in("r9") a6,
out("rcx") _,
out("r11") _,
lateout("rax") ret,
);
ret as isize
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment