Kinda get network working

This commit is contained in:
Michael Mikovsky
2025-08-12 22:24:00 -06:00
parent 8b2a596b9a
commit 856d7e467f
15 changed files with 3316 additions and 3219 deletions
+3 -1
View File
@@ -4,9 +4,11 @@ version = "0.1.0"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
bincode = "2.0.1"
ctor = "0.5.0" ctor = "0.5.0"
libc = "0.2.175" libc = "0.2.175"
# syscalls = "0.6.18"
syscall_lib = { path = "syscall_lib" }
syscaller = "0.2.2"
[build-dependencies] [build-dependencies]
cmake = "0.1" cmake = "0.1"
+8
View File
@@ -0,0 +1,8 @@
[package]
name = "client"
version = "0.1.0"
edition = "2024"
[dependencies]
syscall_lib = { path = "../syscall_lib" }
syscaller = "0.2.2"
+85
View File
@@ -0,0 +1,85 @@
mod syscall_exec;
use std::{
io::{Read, Write},
net::{TcpListener, TcpStream},
thread,
};
use syscall_lib::{Message, ProgramMemory, Syscall};
fn main() {
let listener = TcpListener::bind("127.0.0.1:1234").unwrap();
for stream in listener.incoming() {
let mut stream = stream.unwrap();
thread::spawn(move || {
let _ = handle_connection(&mut stream);
println!("Connection from {} closed", stream.peer_addr().unwrap());
});
}
}
fn handle_connection(stream: &mut TcpStream) -> Result<(), std::io::Error> {
println!("Got connection from {}", stream.peer_addr()?);
// let mut memory = ProgramMemory::default();
loop {
let mut size_buf = [0u8; 4];
stream.read_exact(&mut size_buf)?;
let size = u32::from_be_bytes(size_buf);
let mut buf = vec![0u8; size as usize];
stream.read_exact(&mut buf)?;
let decoded = Syscall::decode(&buf).unwrap();
println!("{:?} -> ", decoded);
// let result = match decoded {
// Syscall::Write(..) => 0,
// _ => syscall_exec::execute_syscall(decoded),
// };
let result = syscall_exec::execute_syscall(decoded);
println!("{:?}", result);
let bytes: [u8; 8] = result.to_be_bytes();
stream.write_all(&bytes)?;
stream.flush()?;
// let response = bincode::serialize(&result).unwrap();
// stream.write_all(&response).unwrap();
// match decoded {
// Message::RequestMemory(addr) => {
// let mem_map = memory.lock().unwrap();
// let data = mem_map.get(&addr);
// let response = bincode::serialize(&data).unwrap();
// stream.write_all(&response).unwrap();
// }
// Message::UpdateMemory(addr, data) => {
// let mut mem_map = memory.lock().unwrap();
// mem_map.insert(addr, data);
// println!("Memory at {} updated.", addr);
// }
// Message::Syscall(_, _) => {
// // The host doesn't execute the syscall.
// // It just waits for the result.
// }
// Message::SyscallReturn(ret, new_mem) => {
// println!("Syscall returned with value: {}", ret);
// if let Some((addr, data)) = new_mem {
// let mut mem_map = memory.lock().unwrap();
// mem_map.insert(addr, data);
// println!("New memory object created at {}.", addr);
// }
// }
// }
// println!("{:?}", decoded);
}
}
+658
View File
@@ -0,0 +1,658 @@
use syscall_lib::Syscall;
use syscaller::{syscall0, syscall1, syscall2, syscall3, syscall4, syscall5, syscall6};
// fn syscall0(number: isize) -> isize {
// unsafe { syscaller::syscall0(number as usize) }
// }
// fn syscall1(number: isize, arg0: isize) -> isize {
// unsafe { syscaller::syscall1(number as usize, arg0 as usize) }
// }
// fn syscall2(number: isize, arg0: isize, arg1: isize) -> isize {
// unsafe { syscaller::syscall2(number as usize, arg0 as usize, arg1 as usize) }
// }
// fn syscall3(number: isize, arg0: isize, arg1: isize, arg2: isize) -> isize {
// unsafe { syscaller::syscall3(number as usize, arg0 as usize, arg1 as usize, arg2 as usize) }
// }
// fn syscall4(number: isize, arg0: isize, arg1: isize, arg2: isize, arg3: isize) -> isize {
// unsafe {
// syscaller::syscall4(
// number as usize,
// arg0 as usize,
// arg1 as usize,
// arg2 as usize,
// arg3 as usize,
// )
// }
// }
// fn syscall5(
// number: isize,
// arg0: isize,
// arg1: isize,
// arg2: isize,
// arg3: isize,
// arg4: isize,
// ) -> isize {
// unsafe {
// syscaller::syscall5(
// number as usize,
// arg0 as usize,
// arg1 as usize,
// arg2 as usize,
// arg3 as usize,
// arg4 as usize,
// )
// }
// }
// fn syscall6(
// number: isize,
// arg0: isize,
// arg1: isize,
// arg2: isize,
// arg3: isize,
// arg4: isize,
// arg5: isize,
// ) -> isize {
// unsafe {
// syscaller::syscall6(
// number as usize,
// arg0 as usize,
// arg1 as usize,
// arg2 as usize,
// arg3 as usize,
// arg4 as usize,
// arg5 as usize,
// )
// }
// }
// The Syscall enum and type aliases from the previous response are assumed to be present here.
#[allow(unused_unsafe)]
pub fn execute_syscall(syscall_obj: Syscall) -> isize {
match syscall_obj {
Syscall::Read(arg0, arg1, arg2) => unsafe { syscall3(0, arg0, arg1, arg2) },
Syscall::Write(arg0, arg1, arg2) => unsafe { syscall3(1, arg0, arg1, arg2) },
Syscall::Open(arg0, arg1, arg2) => unsafe { syscall3(2, arg0, arg1, arg2) },
Syscall::Close(arg0) => unsafe { syscall1(3, arg0) },
Syscall::Stat(arg0, arg1) => unsafe { syscall2(4, arg0, arg1) },
Syscall::Fstat(arg0, arg1) => unsafe { syscall2(5, arg0, arg1) },
Syscall::Lstat(arg0, arg1) => unsafe { syscall2(6, arg0, arg1) },
Syscall::Poll(arg0, arg1, arg2) => unsafe { syscall3(7, arg0, arg1, arg2) },
Syscall::Lseek(arg0, arg1, arg2) => unsafe { syscall3(8, arg0, arg1, arg2) },
Syscall::Mmap(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(9, arg0, arg1, arg2, arg3, arg4, arg5)
},
Syscall::Mprotect(arg0, arg1, arg2) => unsafe { syscall3(10, arg0, arg1, arg2) },
Syscall::Munmap(arg0, arg1) => unsafe { syscall2(11, arg0, arg1) },
Syscall::Brk(arg0) => unsafe { syscall1(12, arg0) },
Syscall::RtSigaction(arg0, arg1, arg2, arg3) => unsafe {
syscall4(13, arg0, arg1, arg2, arg3)
},
Syscall::RtSigprocmask(arg0, arg1, arg2, arg3) => unsafe {
syscall4(14, arg0, arg1, arg2, arg3)
},
Syscall::RtSigreturn => unsafe { syscall0(15) },
Syscall::Ioctl(arg0, arg1, arg2) => unsafe { syscall3(16, arg0, arg1, arg2) },
Syscall::Pread64(arg0, arg1, arg2, arg3) => unsafe { syscall4(17, arg0, arg1, arg2, arg3) },
Syscall::Pwrite64(arg0, arg1, arg2, arg3) => unsafe {
syscall4(18, arg0, arg1, arg2, arg3)
},
Syscall::Readv(arg0, arg1, arg2) => unsafe { syscall3(19, arg0, arg1, arg2) },
Syscall::Writev(arg0, arg1, arg2) => unsafe { syscall3(20, arg0, arg1, arg2) },
Syscall::Access(arg0, arg1) => unsafe { syscall2(21, arg0, arg1) },
Syscall::Pipe(arg0) => unsafe { syscall1(22, arg0) },
Syscall::Select(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(23, arg0, arg1, arg2, arg3, arg4)
},
Syscall::SchedYield => unsafe { syscall0(24) },
Syscall::Mremap(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(25, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Msync(arg0, arg1, arg2) => unsafe { syscall3(26, arg0, arg1, arg2) },
Syscall::Mincore(arg0, arg1, arg2) => unsafe { syscall3(27, arg0, arg1, arg2) },
Syscall::Madvise(arg0, arg1, arg2) => unsafe { syscall3(28, arg0, arg1, arg2) },
Syscall::Shmget(arg0, arg1, arg2) => unsafe { syscall3(29, arg0, arg1, arg2) },
Syscall::Shmat(arg0, arg1, arg2) => unsafe { syscall3(30, arg0, arg1, arg2) },
Syscall::Shmctl(arg0, arg1, arg2) => unsafe { syscall3(31, arg0, arg1, arg2) },
Syscall::Dup(arg0) => unsafe { syscall1(32, arg0) },
Syscall::Dup2(arg0, arg1) => unsafe { syscall2(33, arg0, arg1) },
Syscall::Pause => unsafe { syscall0(34) },
Syscall::Nanosleep(arg0, arg1) => unsafe { syscall2(35, arg0, arg1) },
Syscall::Getitimer(arg0, arg1) => unsafe { syscall2(36, arg0, arg1) },
Syscall::Alarm(arg0) => unsafe { syscall1(37, arg0) },
Syscall::Setitimer(arg0, arg1, arg2) => unsafe { syscall3(38, arg0, arg1, arg2) },
Syscall::Getpid => unsafe { syscall0(39) },
Syscall::Sendfile(arg0, arg1, arg2, arg3) => unsafe {
syscall4(40, arg0, arg1, arg2, arg3)
},
Syscall::Socket(arg0, arg1, arg2) => unsafe { syscall3(41, arg0, arg1, arg2) },
Syscall::Connect(arg0, arg1, arg2) => unsafe { syscall3(42, arg0, arg1, arg2) },
Syscall::Accept(arg0, arg1, arg2) => unsafe { syscall3(43, arg0, arg1, arg2) },
Syscall::Sendto(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(44, arg0, arg1, arg2, arg3, arg4, arg5)
},
Syscall::Recvfrom(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(45, arg0, arg1, arg2, arg3, arg4, arg5)
},
Syscall::Sendmsg(arg0, arg1, arg2) => unsafe { syscall3(46, arg0, arg1, arg2) },
Syscall::Recvmsg(arg0, arg1, arg2) => unsafe { syscall3(47, arg0, arg1, arg2) },
Syscall::Shutdown(arg0, arg1) => unsafe { syscall2(48, arg0, arg1) },
Syscall::Bind(arg0, arg1, arg2) => unsafe { syscall3(49, arg0, arg1, arg2) },
Syscall::Listen(arg0, arg1) => unsafe { syscall2(50, arg0, arg1) },
Syscall::Getsockname(arg0, arg1, arg2) => unsafe { syscall3(51, arg0, arg1, arg2) },
Syscall::Getpeername(arg0, arg1, arg2) => unsafe { syscall3(52, arg0, arg1, arg2) },
Syscall::Socketpair(arg0, arg1, arg2, arg3) => unsafe {
syscall4(53, arg0, arg1, arg2, arg3)
},
Syscall::Setsockopt(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(54, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Getsockopt(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(55, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Clone(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(56, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Fork => unsafe { syscall0(57) },
Syscall::Vfork => unsafe { syscall0(58) },
Syscall::Execve(arg0, arg1, arg2) => unsafe { syscall3(59, arg0, arg1, arg2) },
Syscall::Exit(arg0) => unsafe { syscall1(60, arg0) },
Syscall::Wait4(arg0, arg1, arg2, arg3) => unsafe { syscall4(61, arg0, arg1, arg2, arg3) },
Syscall::Kill(arg0, arg1) => unsafe { syscall2(62, arg0, arg1) },
Syscall::Uname(arg0) => unsafe { syscall1(63, arg0) },
Syscall::Semget(arg0, arg1, arg2) => unsafe { syscall3(64, arg0, arg1, arg2) },
Syscall::Semop(arg0, arg1, arg2) => unsafe { syscall3(65, arg0, arg1, arg2) },
Syscall::Semctl(arg0, arg1, arg2, arg3) => unsafe { syscall4(66, arg0, arg1, arg2, arg3) },
Syscall::Shmdt(arg0) => unsafe { syscall1(67, arg0) },
Syscall::Msgget(arg0, arg1) => unsafe { syscall2(68, arg0, arg1) },
Syscall::Msgsnd(arg0, arg1, arg2, arg3) => unsafe { syscall4(69, arg0, arg1, arg2, arg3) },
Syscall::Msgrcv(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(70, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Msgctl(arg0, arg1, arg2) => unsafe { syscall3(71, arg0, arg1, arg2) },
Syscall::Fcntl(arg0, arg1, arg2) => unsafe { syscall3(72, arg0, arg1, arg2) },
Syscall::Flock(arg0, arg1) => unsafe { syscall2(73, arg0, arg1) },
Syscall::Fsync(arg0) => unsafe { syscall1(74, arg0) },
Syscall::Fdatasync(arg0) => unsafe { syscall1(75, arg0) },
Syscall::Truncate(arg0, arg1) => unsafe { syscall2(76, arg0, arg1) },
Syscall::Ftruncate(arg0, arg1) => unsafe { syscall2(77, arg0, arg1) },
Syscall::Getdents(arg0, arg1, arg2) => unsafe { syscall3(78, arg0, arg1, arg2) },
Syscall::Getcwd(arg0, arg1) => unsafe { syscall2(79, arg0, arg1) },
Syscall::Chdir(arg0) => unsafe { syscall1(80, arg0) },
Syscall::Fchdir(arg0) => unsafe { syscall1(81, arg0) },
Syscall::Rename(arg0, arg1) => unsafe { syscall2(82, arg0, arg1) },
Syscall::Mkdir(arg0, arg1) => unsafe { syscall2(83, arg0, arg1) },
Syscall::Rmdir(arg0) => unsafe { syscall1(84, arg0) },
Syscall::Creat(arg0, arg1) => unsafe { syscall2(85, arg0, arg1) },
Syscall::Link(arg0, arg1) => unsafe { syscall2(86, arg0, arg1) },
Syscall::Unlink(arg0) => unsafe { syscall1(87, arg0) },
Syscall::Symlink(arg0, arg1) => unsafe { syscall2(88, arg0, arg1) },
Syscall::Readlink(arg0, arg1, arg2) => unsafe { syscall3(89, arg0, arg1, arg2) },
Syscall::Chmod(arg0, arg1) => unsafe { syscall2(90, arg0, arg1) },
Syscall::Fchmod(arg0, arg1) => unsafe { syscall2(91, arg0, arg1) },
Syscall::Chown(arg0, arg1, arg2) => unsafe { syscall3(92, arg0, arg1, arg2) },
Syscall::Fchown(arg0, arg1, arg2) => unsafe { syscall3(93, arg0, arg1, arg2) },
Syscall::Lchown(arg0, arg1, arg2) => unsafe { syscall3(94, arg0, arg1, arg2) },
Syscall::Umask(arg0) => unsafe { syscall1(95, arg0) },
Syscall::Gettimeofday(arg0, arg1) => unsafe { syscall2(96, arg0, arg1) },
Syscall::Getrlimit(arg0, arg1) => unsafe { syscall2(97, arg0, arg1) },
Syscall::Getrusage(arg0, arg1) => unsafe { syscall2(98, arg0, arg1) },
Syscall::Sysinfo(arg0) => unsafe { syscall1(99, arg0) },
Syscall::Times(arg0) => unsafe { syscall1(100, arg0) },
Syscall::Ptrace(arg0, arg1, arg2, arg3) => unsafe { syscall4(101, arg0, arg1, arg2, arg3) },
Syscall::Getuid => unsafe { syscall0(102) },
Syscall::Syslog(arg0, arg1, arg2) => unsafe { syscall3(103, arg0, arg1, arg2) },
Syscall::Getgid => unsafe { syscall0(104) },
Syscall::Setuid(arg0) => unsafe { syscall1(105, arg0) },
Syscall::Setgid(arg0) => unsafe { syscall1(106, arg0) },
Syscall::Geteuid => unsafe { syscall0(107) },
Syscall::Getegid => unsafe { syscall0(108) },
Syscall::Setpgid(arg0, arg1) => unsafe { syscall2(109, arg0, arg1) },
Syscall::Getppid => unsafe { syscall0(110) },
Syscall::Getpgrp => unsafe { syscall0(111) },
Syscall::Setsid => unsafe { syscall0(112) },
Syscall::Setreuid(arg0, arg1) => unsafe { syscall2(113, arg0, arg1) },
Syscall::Setregid(arg0, arg1) => unsafe { syscall2(114, arg0, arg1) },
Syscall::Getgroups(arg0, arg1) => unsafe { syscall2(115, arg0, arg1) },
Syscall::Setgroups(arg0, arg1) => unsafe { syscall2(116, arg0, arg1) },
Syscall::Setresuid(arg0, arg1, arg2) => unsafe { syscall3(117, arg0, arg1, arg2) },
Syscall::Getresuid(arg0, arg1, arg2) => unsafe { syscall3(118, arg0, arg1, arg2) },
Syscall::Setresgid(arg0, arg1, arg2) => unsafe { syscall3(119, arg0, arg1, arg2) },
Syscall::Getresgid(arg0, arg1, arg2) => unsafe { syscall3(120, arg0, arg1, arg2) },
Syscall::Getpgid(arg0) => unsafe { syscall1(121, arg0) },
Syscall::Setfsuid(arg0) => unsafe { syscall1(122, arg0) },
Syscall::Setfsgid(arg0) => unsafe { syscall1(123, arg0) },
Syscall::Getsid(arg0) => unsafe { syscall1(124, arg0) },
Syscall::Capget(arg0, arg1) => unsafe { syscall2(125, arg0, arg1) },
Syscall::Capset(arg0, arg1) => unsafe { syscall2(126, arg0, arg1) },
Syscall::RtSigpending(arg0, arg1) => unsafe { syscall2(127, arg0, arg1) },
Syscall::RtSigtimedwait(arg0, arg1, arg2, arg3) => unsafe {
syscall4(128, arg0, arg1, arg2, arg3)
},
Syscall::RtSigqueueinfo(arg0, arg1, arg2) => unsafe { syscall3(129, arg0, arg1, arg2) },
Syscall::RtSigsuspend(arg0, arg1) => unsafe { syscall2(130, arg0, arg1) },
Syscall::Sigaltstack(arg0, arg1) => unsafe { syscall2(131, arg0, arg1) },
Syscall::Utime(arg0, arg1) => unsafe { syscall2(132, arg0, arg1) },
Syscall::Mknod(arg0, arg1, arg2) => unsafe { syscall3(133, arg0, arg1, arg2) },
Syscall::Uselib(arg0) => unsafe { syscall1(134, arg0) },
Syscall::Personality(arg0) => unsafe { syscall1(135, arg0) },
Syscall::Ustat(arg0, arg1) => unsafe { syscall2(136, arg0, arg1) },
Syscall::Statfs(arg0, arg1) => unsafe { syscall2(137, arg0, arg1) },
Syscall::Fstatfs(arg0, arg1) => unsafe { syscall2(138, arg0, arg1) },
Syscall::Sysfs(arg0, arg1, arg2) => unsafe { syscall3(139, arg0, arg1, arg2) },
Syscall::Getpriority(arg0, arg1) => unsafe { syscall2(140, arg0, arg1) },
Syscall::Setpriority(arg0, arg1, arg2) => unsafe { syscall3(141, arg0, arg1, arg2) },
Syscall::SchedSetparam(arg0, arg1) => unsafe { syscall2(142, arg0, arg1) },
Syscall::SchedGetparam(arg0, arg1) => unsafe { syscall2(143, arg0, arg1) },
Syscall::SchedSetscheduler(arg0, arg1, arg2) => unsafe { syscall3(144, arg0, arg1, arg2) },
Syscall::SchedGetscheduler(arg0) => unsafe { syscall1(145, arg0) },
Syscall::SchedGetPriorityMax(arg0) => unsafe { syscall1(146, arg0) },
Syscall::SchedGetPriorityMin(arg0) => unsafe { syscall1(147, arg0) },
Syscall::SchedRrGetInterval(arg0, arg1) => unsafe { syscall2(148, arg0, arg1) },
Syscall::Mlock(arg0, arg1) => unsafe { syscall2(149, arg0, arg1) },
Syscall::Munlock(arg0, arg1) => unsafe { syscall2(150, arg0, arg1) },
Syscall::Mlockall(arg0) => unsafe { syscall1(151, arg0) },
Syscall::Munlockall => unsafe { syscall0(152) },
Syscall::Vhangup => unsafe { syscall0(153) },
Syscall::ModifyLdt(arg0, arg1, arg2) => unsafe { syscall3(154, arg0, arg1, arg2) },
Syscall::PivotRoot(arg0, arg1) => unsafe { syscall2(155, arg0, arg1) },
Syscall::_Sysctl(arg0) => unsafe { syscall1(156, arg0) },
Syscall::Prctl(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(157, arg0, arg1, arg2, arg3, arg4)
},
Syscall::ArchPrctl(arg0, arg1) => unsafe { syscall2(158, arg0, arg1) },
Syscall::Adjtimex(arg0) => unsafe { syscall1(159, arg0) },
Syscall::Setrlimit(arg0, arg1) => unsafe { syscall2(160, arg0, arg1) },
Syscall::Chroot(arg0) => unsafe { syscall1(161, arg0) },
Syscall::Sync => unsafe { syscall0(162) },
Syscall::Acct(arg0) => unsafe { syscall1(163, arg0) },
Syscall::Settimeofday(arg0, arg1) => unsafe { syscall2(164, arg0, arg1) },
Syscall::Mount(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(165, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Umount2(arg0, arg1) => unsafe { syscall2(166, arg0, arg1) },
Syscall::Swapon(arg0, arg1) => unsafe { syscall2(167, arg0, arg1) },
Syscall::Swapoff(arg0) => unsafe { syscall1(168, arg0) },
Syscall::Reboot(arg0, arg1, arg2, arg3) => unsafe { syscall4(169, arg0, arg1, arg2, arg3) },
Syscall::Sethostname(arg0, arg1) => unsafe { syscall2(170, arg0, arg1) },
Syscall::Setdomainname(arg0, arg1) => unsafe { syscall2(171, arg0, arg1) },
Syscall::Iopl(arg0) => unsafe { syscall1(172, arg0) },
Syscall::Ioperm(arg0, arg1, arg2) => unsafe { syscall3(173, arg0, arg1, arg2) },
Syscall::CreateModule(arg0, arg1) => unsafe { syscall2(174, arg0, arg1) },
Syscall::InitModule(arg0, arg1, arg2) => unsafe { syscall3(175, arg0, arg1, arg2) },
Syscall::DeleteModule(arg0, arg1) => unsafe { syscall2(176, arg0, arg1) },
Syscall::GetKernelSyms(arg0) => unsafe { syscall1(177, arg0) },
Syscall::QueryModule(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(178, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Quotactl(arg0, arg1, arg2, arg3) => unsafe {
syscall4(179, arg0, arg1, arg2, arg3)
},
Syscall::Nfsservctl(arg0, arg1, arg2) => unsafe { syscall3(180, arg0, arg1, arg2) },
Syscall::Getpmsg => unsafe { syscall0(181) },
Syscall::Putpmsg => unsafe { syscall0(182) },
Syscall::AfsSyscall => unsafe { syscall0(183) },
Syscall::Tuxcall => unsafe { syscall0(184) },
Syscall::Security => unsafe { syscall0(185) },
Syscall::Gettid => unsafe { syscall0(186) },
Syscall::Readahead(arg0, arg1, arg2) => unsafe { syscall3(187, arg0, arg1, arg2) },
Syscall::Setxattr(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(188, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Lsetxattr(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(189, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Fsetxattr(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(190, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Getxattr(arg0, arg1, arg2, arg3) => unsafe {
syscall4(191, arg0, arg1, arg2, arg3)
},
Syscall::Lgetxattr(arg0, arg1, arg2, arg3) => unsafe {
syscall4(192, arg0, arg1, arg2, arg3)
},
Syscall::Fgetxattr(arg0, arg1, arg2, arg3) => unsafe {
syscall4(193, arg0, arg1, arg2, arg3)
},
Syscall::Listxattr(arg0, arg1, arg2) => unsafe { syscall3(194, arg0, arg1, arg2) },
Syscall::Llistxattr(arg0, arg1, arg2) => unsafe { syscall3(195, arg0, arg1, arg2) },
Syscall::Flistxattr(arg0, arg1, arg2) => unsafe { syscall3(196, arg0, arg1, arg2) },
Syscall::Removexattr(arg0, arg1) => unsafe { syscall2(197, arg0, arg1) },
Syscall::Lremovexattr(arg0, arg1) => unsafe { syscall2(198, arg0, arg1) },
Syscall::Fremovexattr(arg0, arg1) => unsafe { syscall2(199, arg0, arg1) },
Syscall::Tkill(arg0, arg1) => unsafe { syscall2(200, arg0, arg1) },
Syscall::Time(arg0) => unsafe { syscall1(201, arg0) },
Syscall::Futex(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(202, arg0, arg1, arg2, arg3, arg4, arg5)
},
Syscall::SchedSetaffinity(arg0, arg1, arg2) => unsafe { syscall3(203, arg0, arg1, arg2) },
Syscall::SchedGetaffinity(arg0, arg1, arg2) => unsafe { syscall3(204, arg0, arg1, arg2) },
Syscall::SetThreadArea(arg0) => unsafe { syscall1(205, arg0) },
Syscall::IoSetup(arg0, arg1) => unsafe { syscall2(206, arg0, arg1) },
Syscall::IoDestroy(arg0) => unsafe { syscall1(207, arg0) },
Syscall::IoGetevents(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(208, arg0, arg1, arg2, arg3, arg4)
},
Syscall::IoSubmit(arg0, arg1, arg2) => unsafe { syscall3(209, arg0, arg1, arg2) },
Syscall::IoCancel(arg0, arg1, arg2) => unsafe { syscall3(210, arg0, arg1, arg2) },
Syscall::GetThreadArea(arg0) => unsafe { syscall1(211, arg0) },
Syscall::LookupDcookie(arg0, arg1, arg2, arg3) => unsafe {
syscall4(212, arg0, arg1, arg2, arg3)
},
Syscall::EpollCreate(arg0) => unsafe { syscall1(213, arg0) },
Syscall::EpollCtlOld => unsafe { syscall0(214) },
Syscall::EpollWaitOld => unsafe { syscall0(215) },
Syscall::RemapFilePages(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(216, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Getdents64(arg0, arg1, arg2) => unsafe { syscall3(217, arg0, arg1, arg2) },
Syscall::SetTidAddress(arg0) => unsafe { syscall1(218, arg0) },
Syscall::RestartSyscall => unsafe { syscall0(219) },
Syscall::Semtimedop(arg0, arg1, arg2, arg3) => unsafe {
syscall4(220, arg0, arg1, arg2, arg3)
},
Syscall::Fadvise64(arg0, arg1, arg2, arg3) => unsafe {
syscall4(221, arg0, arg1, arg2, arg3)
},
Syscall::TimerCreate(arg0, arg1, arg2) => unsafe { syscall3(222, arg0, arg1, arg2) },
Syscall::TimerSettime(arg0, arg1, arg2, arg3) => unsafe {
syscall4(223, arg0, arg1, arg2, arg3)
},
Syscall::TimerGettime(arg0, arg1) => unsafe { syscall2(224, arg0, arg1) },
Syscall::TimerGetoverrun(arg0) => unsafe { syscall1(225, arg0) },
Syscall::TimerDelete(arg0) => unsafe { syscall1(226, arg0) },
Syscall::ClockSettime(arg0, arg1) => unsafe { syscall2(227, arg0, arg1) },
Syscall::ClockGettime(arg0, arg1) => unsafe { syscall2(228, arg0, arg1) },
Syscall::ClockGetres(arg0, arg1) => unsafe { syscall2(229, arg0, arg1) },
Syscall::ClockNanosleep(arg0, arg1, arg2, arg3) => unsafe {
syscall4(230, arg0, arg1, arg2, arg3)
},
Syscall::ExitGroup(arg0) => unsafe { syscall1(231, arg0) },
Syscall::EpollWait(arg0, arg1, arg2, arg3) => unsafe {
syscall4(232, arg0, arg1, arg2, arg3)
},
Syscall::EpollCtl(arg0, arg1, arg2, arg3) => unsafe {
syscall4(233, arg0, arg1, arg2, arg3)
},
Syscall::Tgkill(arg0, arg1, arg2) => unsafe { syscall3(234, arg0, arg1, arg2) },
Syscall::Utimes(arg0, arg1) => unsafe { syscall2(235, arg0, arg1) },
Syscall::Vserver => unsafe { syscall0(236) },
Syscall::Mbind(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(237, arg0, arg1, arg2, arg3, arg4, arg5)
},
Syscall::SetMempolicy(arg0, arg1, arg2) => unsafe { syscall3(238, arg0, arg1, arg2) },
Syscall::GetMempolicy(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(239, arg0, arg1, arg2, arg3, arg4)
},
Syscall::MqOpen(arg0, arg1, arg2, arg3) => unsafe { syscall4(240, arg0, arg1, arg2, arg3) },
Syscall::MqUnlink(arg0) => unsafe { syscall1(241, arg0) },
Syscall::MqTimedsend(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(242, arg0, arg1, arg2, arg3, arg4)
},
Syscall::MqTimedreceive(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(243, arg0, arg1, arg2, arg3, arg4)
},
Syscall::MqNotify(arg0, arg1) => unsafe { syscall2(244, arg0, arg1) },
Syscall::MqGetsetattr(arg0, arg1, arg2) => unsafe { syscall3(245, arg0, arg1, arg2) },
Syscall::KexecLoad(arg0, arg1, arg2, arg3) => unsafe {
syscall4(246, arg0, arg1, arg2, arg3)
},
Syscall::Waitid(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(247, arg0, arg1, arg2, arg3, arg4)
},
Syscall::AddKey(arg0, arg1, arg2, arg3) => unsafe { syscall4(248, arg0, arg1, arg2, arg3) },
Syscall::RequestKey(arg0, arg1, arg2) => unsafe { syscall3(249, arg0, arg1, arg2) },
Syscall::Keyctl(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(250, arg0, arg1, arg2, arg3, arg4)
},
Syscall::IoprioSet(arg0, arg1, arg2) => unsafe { syscall3(251, arg0, arg1, arg2) },
Syscall::IoprioGet(arg0, arg1) => unsafe { syscall2(252, arg0, arg1) },
Syscall::InotifyInit => unsafe { syscall0(253) },
Syscall::InotifyAddWatch(arg0, arg1, arg2) => unsafe { syscall3(254, arg0, arg1, arg2) },
Syscall::InotifyRmWatch(arg0, arg1) => unsafe { syscall2(255, arg0, arg1) },
Syscall::MigratePages(arg0, arg1, arg2, arg3) => unsafe {
syscall4(256, arg0, arg1, arg2, arg3)
},
Syscall::Openat(arg0, arg1, arg2, arg3) => unsafe { syscall4(257, arg0, arg1, arg2, arg3) },
Syscall::Mkdirat(arg0, arg1, arg2) => unsafe { syscall3(258, arg0, arg1, arg2) },
Syscall::Mknodat(arg0, arg1, arg2, arg3) => unsafe {
syscall4(259, arg0, arg1, arg2, arg3)
},
Syscall::Fchownat(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(260, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Futimesat(arg0, arg1, arg2) => unsafe { syscall3(261, arg0, arg1, arg2) },
Syscall::Newfstatat(arg0, arg1, arg2, arg3) => unsafe {
syscall4(262, arg0, arg1, arg2, arg3)
},
Syscall::Unlinkat(arg0, arg1, arg2) => unsafe { syscall3(263, arg0, arg1, arg2) },
Syscall::Renameat(arg0, arg1, arg2, arg3) => unsafe {
syscall4(264, arg0, arg1, arg2, arg3)
},
Syscall::Linkat(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(265, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Symlinkat(arg0, arg1, arg2) => unsafe { syscall3(266, arg0, arg1, arg2) },
Syscall::Readlinkat(arg0, arg1, arg2, arg3) => unsafe {
syscall4(267, arg0, arg1, arg2, arg3)
},
Syscall::Fchmodat(arg0, arg1, arg2) => unsafe { syscall3(268, arg0, arg1, arg2) },
Syscall::Faccessat(arg0, arg1, arg2) => unsafe { syscall3(269, arg0, arg1, arg2) },
Syscall::Pselect6(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(270, arg0, arg1, arg2, arg3, arg4, arg5)
},
Syscall::Ppoll(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(271, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Unshare(arg0) => unsafe { syscall1(272, arg0) },
Syscall::SetRobustList(arg0, arg1) => unsafe { syscall2(273, arg0, arg1) },
Syscall::GetRobustList(arg0, arg1, arg2) => unsafe { syscall3(274, arg0, arg1, arg2) },
Syscall::Splice(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(275, arg0, arg1, arg2, arg3, arg4, arg5)
},
Syscall::Tee(arg0, arg1, arg2, arg3) => unsafe { syscall4(276, arg0, arg1, arg2, arg3) },
Syscall::SyncFileRange(arg0, arg1, arg2, arg3) => unsafe {
syscall4(277, arg0, arg1, arg2, arg3)
},
Syscall::Vmsplice(arg0, arg1, arg2, arg3) => unsafe {
syscall4(278, arg0, arg1, arg2, arg3)
},
Syscall::MovePages(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(279, arg0, arg1, arg2, arg3, arg4, arg5)
},
Syscall::Utimensat(arg0, arg1, arg2, arg3) => unsafe {
syscall4(280, arg0, arg1, arg2, arg3)
},
Syscall::EpollPwait(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(281, arg0, arg1, arg2, arg3, arg4, arg5)
},
Syscall::Signalfd(arg0, arg1, arg2) => unsafe { syscall3(282, arg0, arg1, arg2) },
Syscall::TimerfdCreate(arg0, arg1) => unsafe { syscall2(283, arg0, arg1) },
Syscall::Eventfd(arg0, arg1) => unsafe { syscall2(284, arg0, arg1) },
Syscall::Fallocate(arg0, arg1, arg2, arg3) => unsafe {
syscall4(285, arg0, arg1, arg2, arg3)
},
Syscall::TimerfdSettime(arg0, arg1, arg2, arg3) => unsafe {
syscall4(286, arg0, arg1, arg2, arg3)
},
Syscall::TimerfdGettime(arg0, arg1) => unsafe { syscall2(287, arg0, arg1) },
Syscall::Accept4(arg0, arg1, arg2, arg3) => unsafe {
syscall4(288, arg0, arg1, arg2, arg3)
},
Syscall::Signalfd4(arg0, arg1, arg2, arg3) => unsafe {
syscall4(289, arg0, arg1, arg2, arg3)
},
Syscall::Eventfd2(arg0, arg1) => unsafe { syscall2(290, arg0, arg1) },
Syscall::EpollCreate1(arg0) => unsafe { syscall1(291, arg0) },
Syscall::Dup3(arg0, arg1, arg2) => unsafe { syscall3(292, arg0, arg1, arg2) },
Syscall::Pipe2(arg0, arg1) => unsafe { syscall2(293, arg0, arg1) },
Syscall::InotifyInit1(arg0) => unsafe { syscall1(294, arg0) },
Syscall::Preadv(arg0, arg1, arg2, arg3) => unsafe { syscall4(295, arg0, arg1, arg2, arg3) },
Syscall::Pwritev(arg0, arg1, arg2, arg3) => unsafe {
syscall4(296, arg0, arg1, arg2, arg3)
},
Syscall::RtTgsigqueueinfo(arg0, arg1, arg2, arg3) => unsafe {
syscall4(297, arg0, arg1, arg2, arg3)
},
Syscall::PerfEventOpen(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(298, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Recvmmsg(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(299, arg0, arg1, arg2, arg3, arg4)
},
Syscall::FanotifyInit(arg0, arg1) => unsafe { syscall2(300, arg0, arg1) },
Syscall::FanotifyMark(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(301, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Prlimit64(arg0, arg1, arg2, arg3) => unsafe {
syscall4(302, arg0, arg1, arg2, arg3)
},
Syscall::NameToHandleAt(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(303, arg0, arg1, arg2, arg3, arg4)
},
Syscall::OpenByHandleAt(arg0, arg1, arg2) => unsafe { syscall3(304, arg0, arg1, arg2) },
Syscall::ClockAdjtime(arg0, arg1) => unsafe { syscall2(305, arg0, arg1) },
Syscall::Syncfs(arg0) => unsafe { syscall1(306, arg0) },
Syscall::Sendmmsg(arg0, arg1, arg2, arg3) => unsafe {
syscall4(307, arg0, arg1, arg2, arg3)
},
Syscall::Setns(arg0, arg1) => unsafe { syscall2(308, arg0, arg1) },
Syscall::Getcpu(arg0, arg1, arg2) => unsafe { syscall3(309, arg0, arg1, arg2) },
Syscall::ProcessVmReadv(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(310, arg0, arg1, arg2, arg3, arg4, arg5)
},
Syscall::ProcessVmWritev(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(311, arg0, arg1, arg2, arg3, arg4, arg5)
},
Syscall::Kcmp(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(312, arg0, arg1, arg2, arg3, arg4)
},
Syscall::FinitModule(arg0, arg1, arg2) => unsafe { syscall3(313, arg0, arg1, arg2) },
Syscall::SchedSetattr(arg0, arg1, arg2) => unsafe { syscall3(314, arg0, arg1, arg2) },
Syscall::SchedGetattr(arg0, arg1, arg2, arg3) => unsafe {
syscall4(315, arg0, arg1, arg2, arg3)
},
Syscall::Renameat2(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(316, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Seccomp(arg0, arg1, arg2) => unsafe { syscall3(317, arg0, arg1, arg2) },
Syscall::Getrandom(arg0, arg1, arg2) => unsafe { syscall3(318, arg0, arg1, arg2) },
Syscall::MemfdCreate(arg0, arg1) => unsafe { syscall2(319, arg0, arg1) },
Syscall::KexecFileLoad(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(320, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Bpf(arg0, arg1, arg2) => unsafe { syscall3(321, arg0, arg1, arg2) },
Syscall::Execveat(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(322, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Userfaultfd(arg0) => unsafe { syscall1(323, arg0) },
Syscall::Membarrier(arg0, arg1) => unsafe { syscall2(324, arg0, arg1) },
Syscall::Mlock2(arg0, arg1, arg2) => unsafe { syscall3(325, arg0, arg1, arg2) },
Syscall::CopyFileRange(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(326, arg0, arg1, arg2, arg3, arg4, arg5)
},
Syscall::Preadv2(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(327, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Pwritev2(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(328, arg0, arg1, arg2, arg3, arg4)
},
Syscall::PkeyMprotect(arg0, arg1, arg2, arg3) => unsafe {
syscall4(329, arg0, arg1, arg2, arg3)
},
Syscall::PkeyAlloc(arg0, arg1) => unsafe { syscall2(330, arg0, arg1) },
Syscall::PkeyFree(arg0) => unsafe { syscall1(331, arg0) },
Syscall::Statx(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(332, arg0, arg1, arg2, arg3, arg4)
},
Syscall::IoPgetevents(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(333, arg0, arg1, arg2, arg3, arg4, arg5)
},
Syscall::Rseq(arg0, arg1, arg2, arg3) => unsafe { syscall4(334, arg0, arg1, arg2, arg3) },
Syscall::PidfdSendSignal(arg0, arg1, arg2, arg3) => unsafe {
syscall4(424, arg0, arg1, arg2, arg3)
},
Syscall::IoUringSetup(arg0, arg1) => unsafe { syscall2(425, arg0, arg1) },
Syscall::IoUringEnter(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(426, arg0, arg1, arg2, arg3, arg4)
},
Syscall::IoUringRegister(arg0, arg1, arg2, arg3) => unsafe {
syscall4(427, arg0, arg1, arg2, arg3)
},
Syscall::OpenTree(arg0, arg1, arg2) => unsafe { syscall3(428, arg0, arg1, arg2) },
Syscall::MoveMount(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(429, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Fsopen(arg0, arg1, arg2) => unsafe { syscall3(430, arg0, arg1, arg2) },
Syscall::Fsconfig(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(431, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Fsmount(arg0, arg1, arg2) => unsafe { syscall3(432, arg0, arg1, arg2) },
Syscall::Fspick(arg0, arg1, arg2) => unsafe { syscall3(433, arg0, arg1, arg2) },
Syscall::PidfdOpen(arg0, arg1) => unsafe { syscall2(434, arg0, arg1) },
Syscall::Clone3(arg0, arg1) => unsafe { syscall2(435, arg0, arg1) },
Syscall::CloseRange(arg0, arg1, arg2) => unsafe { syscall3(436, arg0, arg1, arg2) },
Syscall::Openat2(arg0, arg1, arg2, arg3) => unsafe {
syscall4(437, arg0, arg1, arg2, arg3)
},
Syscall::PidfdGetfd(arg0, arg1, arg2) => unsafe { syscall3(438, arg0, arg1, arg2) },
Syscall::Faccessat2(arg0, arg1, arg2, arg3) => unsafe {
syscall4(439, arg0, arg1, arg2, arg3)
},
Syscall::ProcessMadvise(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(440, arg0, arg1, arg2, arg3, arg4)
},
Syscall::EpollPwait2(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(441, arg0, arg1, arg2, arg3, arg4)
},
Syscall::MountSetattr(arg0, arg1, arg2, arg3) => unsafe {
syscall4(442, arg0, arg1, arg2, arg3)
},
Syscall::QuotactlFd(arg0, arg1, arg2, arg3) => unsafe {
syscall4(443, arg0, arg1, arg2, arg3)
},
Syscall::LandlockCreateRuleset(arg0, arg1, arg2) => unsafe {
syscall3(444, arg0, arg1, arg2)
},
Syscall::LandlockAddRule(arg0, arg1, arg2, arg3) => unsafe {
syscall4(445, arg0, arg1, arg2, arg3)
},
Syscall::LandlockRestrictSelf(arg0, arg1) => unsafe { syscall2(446, arg0, arg1) },
Syscall::MemfdSecret(arg0) => unsafe { syscall1(447, arg0) },
Syscall::ProcessMrelease(arg0, arg1) => unsafe { syscall2(448, arg0, arg1) },
Syscall::FutexWaitv(arg0, arg1, arg2) => unsafe { syscall3(449, arg0, arg1, arg2) },
Syscall::SetMempolicyHomeNode(arg0, arg1, arg2) => unsafe {
syscall3(450, arg0, arg1, arg2)
},
Syscall::Cachestat(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(451, arg0, arg1, arg2, arg3, arg4)
},
Syscall::Fchmodat2(arg0, arg1, arg2, arg3) => unsafe {
syscall4(452, arg0, arg1, arg2, arg3)
},
Syscall::MapShadowStack(arg0, arg1) => unsafe { syscall2(453, arg0, arg1) },
Syscall::FutexWake(arg0, arg1, arg2) => unsafe { syscall3(454, arg0, arg1, arg2) },
Syscall::FutexWait(arg0, arg1, arg2) => unsafe { syscall3(455, arg0, arg1, arg2) },
Syscall::FutexRequeue(arg0, arg1, arg2, arg3) => unsafe {
syscall4(456, arg0, arg1, arg2, arg3)
},
Syscall::Statmount(arg0, arg1, arg2) => unsafe { syscall3(457, arg0, arg1, arg2) },
Syscall::Listmount(arg0, arg1, arg2) => unsafe { syscall3(458, arg0, arg1, arg2) },
Syscall::LsmGetSelfAttr(arg0, arg1, arg2, arg3) => unsafe {
syscall4(459, arg0, arg1, arg2, arg3)
},
Syscall::LsmSetSelfAttr(arg0, arg1, arg2) => unsafe { syscall3(460, arg0, arg1, arg2) },
Syscall::LsmListModules(arg0, arg1) => unsafe { syscall2(461, arg0, arg1) },
Syscall::Unknown(syscall_num, args) => match args {
[arg0, arg1, arg2, arg3, arg4, arg5] => unsafe {
syscall6(syscall_num, arg0, arg1, arg2, arg3, arg4, arg5)
},
_ => unreachable!(),
},
}
}
+52
View File
@@ -0,0 +1,52 @@
use std::{
io::{BufReader, BufWriter, Read, Write},
net::TcpStream,
};
use syscall_lib::{ProgramMemory, Syscall};
use crate::syscall_exec;
pub struct Host {
stream: TcpStream,
reader: BufReader<TcpStream>,
writer: BufWriter<TcpStream>,
// memory: ProgramMemory,
}
impl Host {
pub fn new() -> Result<Host, std::io::Error> {
let stream = TcpStream::connect("localhost:1234")?;
let reader = BufReader::new(stream.try_clone()?);
let writer = BufWriter::new(stream.try_clone()?);
Ok(Host {
stream,
reader,
writer,
// memory: ProgramMemory::new(),
})
}
pub fn execute(&mut self, syscall: &Syscall) -> isize {
let bytes = syscall.encode();
self.writer
.write_all(&u32::to_be_bytes(bytes.len() as u32))
.unwrap();
self.writer.write_all(&bytes).unwrap();
self.writer.flush().unwrap();
println!("{:?} -> ", syscall);
// let response = syscall_exec::execute_syscall(syscall);
let mut response = [0u8; 8];
self.reader.read_exact(&mut response).unwrap();
let response = isize::from_be_bytes(response);
println!("{:?}", response);
response
}
}
+40 -43
View File
@@ -1,6 +1,9 @@
mod host;
mod syscall_exec;
#[allow(dead_code)] #[allow(dead_code)]
mod syscall_intercept; mod syscall_intercept;
mod syscalls;
use syscall_lib::syscall_should_proxy;
use libc::exit; use libc::exit;
use std::{ use std::{
@@ -11,32 +14,22 @@ use std::{
}; };
use syscall_intercept::*; use syscall_intercept::*;
static mut STREAM: Option<Mutex<TcpStream>> = None; use crate::host::Host;
static mut WRITER: Option<Mutex<BufWriter<TcpStream>>> = None;
static mut HOST: Option<Mutex<Host>> = None;
#[ctor::ctor] #[ctor::ctor]
fn start() { fn start() {
unsafe { unsafe {
STREAM = Some({ HOST = Some({
match TcpStream::connect("127.0.0.1:1234") { match Host::new() {
Ok(stream) => Mutex::new(stream), Ok(host) => Mutex::new(host),
Err(e) => { Err(e) => {
eprintln!("Failed to connect to server: {}", e); eprintln!("Failed to connect to server: {}", e);
exit(1); exit(1);
} }
} }
}); });
WRITER = Some(Mutex::new(BufWriter::new(
#[allow(static_mut_refs)]
STREAM
.as_ref()
.unwrap()
.lock()
.unwrap()
.try_clone()
.unwrap(),
)));
} }
unsafe { set_hook_fn(hook) }; unsafe { set_hook_fn(hook) };
@@ -75,50 +68,54 @@ impl Drop for InterceptGuard {
} }
extern "C" fn hook( extern "C" fn hook(
syscall_num: isize, syscall_num: usize,
arg0: isize, arg0: usize,
arg1: isize, arg1: usize,
arg2: isize, arg2: usize,
arg3: isize, arg3: usize,
arg4: isize, arg4: usize,
arg5: isize, arg5: usize,
_result: &mut isize, result: &mut isize,
) -> InterceptResult { ) -> InterceptResult {
// detect and avoid recursive interception // detect and avoid recursive interception
let _guard = match InterceptGuard::try_lock() { let _guard = match InterceptGuard::try_lock() {
Some(g) => g, Some(g) => g,
None => return InterceptResult::Forward, None => {
println!("Disabled!");
return InterceptResult::Forward;
}
}; };
if !syscalls::syscall_should_proxy(syscall_num) { // if syscall_should_proxy(syscall_num) {
return InterceptResult::Forward; // return InterceptResult::Forward;
} // }
unsafe { unsafe {
unset_hook_fn(); unset_hook_fn();
} }
let args = [arg0, arg1, arg2, arg3, arg4, arg5];
let syscall = syscall_lib::create_syscall(syscall_num, args);
if !syscall_should_proxy(&syscall) {
return InterceptResult::Forward;
}
// Return if is print // Return if is print
// if syscall_num == libc::SYS_write as _ && arg0 == 1 { // if syscall_num == libc::SYS_write as _ && arg0 == 1 {
// return InterceptResult::Forward; // return InterceptResult::Forward;
// } // }
// let args = [arg0, arg1, arg2, arg3, arg4, arg5]; // if syscall_num == libc::SYS_close as _ && arg0 == 1 {
// let desc = if let Some(desc) = syscalls::get_syscall_desc(syscall_num, args) { // return InterceptResult::Forward;
// "test" // }
// } else {
// "test" // println!("{:?}", desc);
// };
unsafe { unsafe {
#[allow(static_mut_refs)] #[allow(static_mut_refs)]
if let Some(client) = WRITER.as_ref() { if let Some(host) = HOST.as_ref() {
client *result = host.lock().unwrap().execute(&syscall);
.lock()
.unwrap()
.write_all(&format!("Data: {:?}\n", syscall_num).as_bytes())
.unwrap();
client.lock().unwrap().flush().unwrap();
} }
} }
@@ -126,5 +123,5 @@ extern "C" fn hook(
set_hook_fn(hook); set_hook_fn(hook);
} }
InterceptResult::Forward InterceptResult::Hook
} }
+688
View File
@@ -0,0 +1,688 @@
use syscall_lib::Syscall;
use syscaller::{syscall0, syscall1, syscall2, syscall3, syscall4, syscall5, syscall6};
// fn syscall0(number: isize) -> isize {
// unsafe { syscaller::syscall0(number as usize) }
// }
// fn syscall1(number: isize, *arg0: isize) -> isize {
// unsafe { syscaller::syscall1(number as usize, *arg0 as usize) }
// }
// fn syscall2(number: isize, *arg0: isize, *arg1: isize) -> isize {
// unsafe { syscaller::syscall2(number as usize, *arg0 as usize, *arg1 as usize) }
// }
// fn syscall3(number: isize, *arg0: isize, *arg1: isize, *arg2: isize) -> isize {
// unsafe { syscaller::syscall3(number as usize, *arg0 as usize, *arg1 as usize, *arg2 as usize) }
// }
// fn syscall4(number: isize, *arg0: isize, *arg1: isize, *arg2: isize, *arg3: isize) -> isize {
// unsafe {
// syscaller::syscall4(
// number as usize,
// arg0 as usize,
// arg1 as usize,
// arg2 as usize,
// arg3 as usize,
// )
// }
// }
// fn syscall5(
// number: isize,
// arg0: isize,
// arg1: isize,
// arg2: isize,
// arg3: isize,
// arg4: isize,
// ) -> isize {
// unsafe {
// syscaller::syscall5(
// number as usize,
// arg0 as usize,
// arg1 as usize,
// arg2 as usize,
// arg3 as usize,
// arg4 as usize,
// )
// }
// }
// fn syscall6(
// number: isize,
// arg0: isize,
// arg1: isize,
// arg2: isize,
// arg3: isize,
// arg4: isize,
// arg5: isize,
// ) -> isize {
// unsafe {
// syscaller::syscall6(
// number as usize,
// arg0 as usize,
// arg1 as usize,
// arg2 as usize,
// arg3 as usize,
// arg4 as usize,
// arg5 as usize,
// )
// }
// }
// The Syscall enum and type aliases from the previous response are assumed to be present here.
#[allow(unused_unsafe)]
pub fn execute_syscall(syscall_obj: &Syscall) -> isize {
match syscall_obj {
Syscall::Read(arg0, arg1, arg2) => unsafe { syscall3(0, *arg0, *arg1, *arg2) },
Syscall::Write(arg0, arg1, arg2) => unsafe { syscall3(1, *arg0, *arg1, *arg2) },
Syscall::Open(arg0, arg1, arg2) => unsafe { syscall3(2, *arg0, *arg1, *arg2) },
Syscall::Close(arg0) => unsafe { syscall1(3, *arg0) },
Syscall::Stat(arg0, arg1) => unsafe { syscall2(4, *arg0, *arg1) },
Syscall::Fstat(arg0, arg1) => unsafe { syscall2(5, *arg0, *arg1) },
Syscall::Lstat(arg0, arg1) => unsafe { syscall2(6, *arg0, *arg1) },
Syscall::Poll(arg0, arg1, arg2) => unsafe { syscall3(7, *arg0, *arg1, *arg2) },
Syscall::Lseek(arg0, arg1, arg2) => unsafe { syscall3(8, *arg0, *arg1, *arg2) },
Syscall::Mmap(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(9, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5)
},
Syscall::Mprotect(arg0, arg1, arg2) => unsafe { syscall3(10, *arg0, *arg1, *arg2) },
Syscall::Munmap(arg0, arg1) => unsafe { syscall2(11, *arg0, *arg1) },
Syscall::Brk(arg0) => unsafe { syscall1(12, *arg0) },
Syscall::RtSigaction(arg0, arg1, arg2, arg3) => unsafe {
syscall4(13, *arg0, *arg1, *arg2, *arg3)
},
Syscall::RtSigprocmask(arg0, arg1, arg2, arg3) => unsafe {
syscall4(14, *arg0, *arg1, *arg2, *arg3)
},
Syscall::RtSigreturn => unsafe { syscall0(15) },
Syscall::Ioctl(arg0, arg1, arg2) => unsafe { syscall3(16, *arg0, *arg1, *arg2) },
Syscall::Pread64(arg0, arg1, arg2, arg3) => unsafe {
syscall4(17, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Pwrite64(arg0, arg1, arg2, arg3) => unsafe {
syscall4(18, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Readv(arg0, arg1, arg2) => unsafe { syscall3(19, *arg0, *arg1, *arg2) },
Syscall::Writev(arg0, arg1, arg2) => unsafe { syscall3(20, *arg0, *arg1, *arg2) },
Syscall::Access(arg0, arg1) => unsafe { syscall2(21, *arg0, *arg1) },
Syscall::Pipe(arg0) => unsafe { syscall1(22, *arg0) },
Syscall::Select(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(23, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::SchedYield => unsafe { syscall0(24) },
Syscall::Mremap(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(25, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Msync(arg0, arg1, arg2) => unsafe { syscall3(26, *arg0, *arg1, *arg2) },
Syscall::Mincore(arg0, arg1, arg2) => unsafe { syscall3(27, *arg0, *arg1, *arg2) },
Syscall::Madvise(arg0, arg1, arg2) => unsafe { syscall3(28, *arg0, *arg1, *arg2) },
Syscall::Shmget(arg0, arg1, arg2) => unsafe { syscall3(29, *arg0, *arg1, *arg2) },
Syscall::Shmat(arg0, arg1, arg2) => unsafe { syscall3(30, *arg0, *arg1, *arg2) },
Syscall::Shmctl(arg0, arg1, arg2) => unsafe { syscall3(31, *arg0, *arg1, *arg2) },
Syscall::Dup(arg0) => unsafe { syscall1(32, *arg0) },
Syscall::Dup2(arg0, arg1) => unsafe { syscall2(33, *arg0, *arg1) },
Syscall::Pause => unsafe { syscall0(34) },
Syscall::Nanosleep(arg0, arg1) => unsafe { syscall2(35, *arg0, *arg1) },
Syscall::Getitimer(arg0, arg1) => unsafe { syscall2(36, *arg0, *arg1) },
Syscall::Alarm(arg0) => unsafe { syscall1(37, *arg0) },
Syscall::Setitimer(arg0, arg1, arg2) => unsafe { syscall3(38, *arg0, *arg1, *arg2) },
Syscall::Getpid => unsafe { syscall0(39) },
Syscall::Sendfile(arg0, arg1, arg2, arg3) => unsafe {
syscall4(40, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Socket(arg0, arg1, arg2) => unsafe { syscall3(41, *arg0, *arg1, *arg2) },
Syscall::Connect(arg0, arg1, arg2) => unsafe { syscall3(42, *arg0, *arg1, *arg2) },
Syscall::Accept(arg0, arg1, arg2) => unsafe { syscall3(43, *arg0, *arg1, *arg2) },
Syscall::Sendto(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(44, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5)
},
Syscall::Recvfrom(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(45, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5)
},
Syscall::Sendmsg(arg0, arg1, arg2) => unsafe { syscall3(46, *arg0, *arg1, *arg2) },
Syscall::Recvmsg(arg0, arg1, arg2) => unsafe { syscall3(47, *arg0, *arg1, *arg2) },
Syscall::Shutdown(arg0, arg1) => unsafe { syscall2(48, *arg0, *arg1) },
Syscall::Bind(arg0, arg1, arg2) => unsafe { syscall3(49, *arg0, *arg1, *arg2) },
Syscall::Listen(arg0, arg1) => unsafe { syscall2(50, *arg0, *arg1) },
Syscall::Getsockname(arg0, arg1, arg2) => unsafe { syscall3(51, *arg0, *arg1, *arg2) },
Syscall::Getpeername(arg0, arg1, arg2) => unsafe { syscall3(52, *arg0, *arg1, *arg2) },
Syscall::Socketpair(arg0, arg1, arg2, arg3) => unsafe {
syscall4(53, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Setsockopt(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(54, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Getsockopt(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(55, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Clone(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(56, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Fork => unsafe { syscall0(57) },
Syscall::Vfork => unsafe { syscall0(58) },
Syscall::Execve(arg0, arg1, arg2) => unsafe { syscall3(59, *arg0, *arg1, *arg2) },
Syscall::Exit(arg0) => unsafe { syscall1(60, *arg0) },
Syscall::Wait4(arg0, arg1, arg2, arg3) => unsafe {
syscall4(61, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Kill(arg0, arg1) => unsafe { syscall2(62, *arg0, *arg1) },
Syscall::Uname(arg0) => unsafe { syscall1(63, *arg0) },
Syscall::Semget(arg0, arg1, arg2) => unsafe { syscall3(64, *arg0, *arg1, *arg2) },
Syscall::Semop(arg0, arg1, arg2) => unsafe { syscall3(65, *arg0, *arg1, *arg2) },
Syscall::Semctl(arg0, arg1, arg2, arg3) => unsafe {
syscall4(66, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Shmdt(arg0) => unsafe { syscall1(67, *arg0) },
Syscall::Msgget(arg0, arg1) => unsafe { syscall2(68, *arg0, *arg1) },
Syscall::Msgsnd(arg0, arg1, arg2, arg3) => unsafe {
syscall4(69, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Msgrcv(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(70, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Msgctl(arg0, arg1, arg2) => unsafe { syscall3(71, *arg0, *arg1, *arg2) },
Syscall::Fcntl(arg0, arg1, arg2) => unsafe { syscall3(72, *arg0, *arg1, *arg2) },
Syscall::Flock(arg0, arg1) => unsafe { syscall2(73, *arg0, *arg1) },
Syscall::Fsync(arg0) => unsafe { syscall1(74, *arg0) },
Syscall::Fdatasync(arg0) => unsafe { syscall1(75, *arg0) },
Syscall::Truncate(arg0, arg1) => unsafe { syscall2(76, *arg0, *arg1) },
Syscall::Ftruncate(arg0, arg1) => unsafe { syscall2(77, *arg0, *arg1) },
Syscall::Getdents(arg0, arg1, arg2) => unsafe { syscall3(78, *arg0, *arg1, *arg2) },
Syscall::Getcwd(arg0, arg1) => unsafe { syscall2(79, *arg0, *arg1) },
Syscall::Chdir(arg0) => unsafe { syscall1(80, *arg0) },
Syscall::Fchdir(arg0) => unsafe { syscall1(81, *arg0) },
Syscall::Rename(arg0, arg1) => unsafe { syscall2(82, *arg0, *arg1) },
Syscall::Mkdir(arg0, arg1) => unsafe { syscall2(83, *arg0, *arg1) },
Syscall::Rmdir(arg0) => unsafe { syscall1(84, *arg0) },
Syscall::Creat(arg0, arg1) => unsafe { syscall2(85, *arg0, *arg1) },
Syscall::Link(arg0, arg1) => unsafe { syscall2(86, *arg0, *arg1) },
Syscall::Unlink(arg0) => unsafe { syscall1(87, *arg0) },
Syscall::Symlink(arg0, arg1) => unsafe { syscall2(88, *arg0, *arg1) },
Syscall::Readlink(arg0, arg1, arg2) => unsafe { syscall3(89, *arg0, *arg1, *arg2) },
Syscall::Chmod(arg0, arg1) => unsafe { syscall2(90, *arg0, *arg1) },
Syscall::Fchmod(arg0, arg1) => unsafe { syscall2(91, *arg0, *arg1) },
Syscall::Chown(arg0, arg1, arg2) => unsafe { syscall3(92, *arg0, *arg1, *arg2) },
Syscall::Fchown(arg0, arg1, arg2) => unsafe { syscall3(93, *arg0, *arg1, *arg2) },
Syscall::Lchown(arg0, arg1, arg2) => unsafe { syscall3(94, *arg0, *arg1, *arg2) },
Syscall::Umask(arg0) => unsafe { syscall1(95, *arg0) },
Syscall::Gettimeofday(arg0, arg1) => unsafe { syscall2(96, *arg0, *arg1) },
Syscall::Getrlimit(arg0, arg1) => unsafe { syscall2(97, *arg0, *arg1) },
Syscall::Getrusage(arg0, arg1) => unsafe { syscall2(98, *arg0, *arg1) },
Syscall::Sysinfo(arg0) => unsafe { syscall1(99, *arg0) },
Syscall::Times(arg0) => unsafe { syscall1(100, *arg0) },
Syscall::Ptrace(arg0, arg1, arg2, arg3) => unsafe {
syscall4(101, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Getuid => unsafe { syscall0(102) },
Syscall::Syslog(arg0, arg1, arg2) => unsafe { syscall3(103, *arg0, *arg1, *arg2) },
Syscall::Getgid => unsafe { syscall0(104) },
Syscall::Setuid(arg0) => unsafe { syscall1(105, *arg0) },
Syscall::Setgid(arg0) => unsafe { syscall1(106, *arg0) },
Syscall::Geteuid => unsafe { syscall0(107) },
Syscall::Getegid => unsafe { syscall0(108) },
Syscall::Setpgid(arg0, arg1) => unsafe { syscall2(109, *arg0, *arg1) },
Syscall::Getppid => unsafe { syscall0(110) },
Syscall::Getpgrp => unsafe { syscall0(111) },
Syscall::Setsid => unsafe { syscall0(112) },
Syscall::Setreuid(arg0, arg1) => unsafe { syscall2(113, *arg0, *arg1) },
Syscall::Setregid(arg0, arg1) => unsafe { syscall2(114, *arg0, *arg1) },
Syscall::Getgroups(arg0, arg1) => unsafe { syscall2(115, *arg0, *arg1) },
Syscall::Setgroups(arg0, arg1) => unsafe { syscall2(116, *arg0, *arg1) },
Syscall::Setresuid(arg0, arg1, arg2) => unsafe { syscall3(117, *arg0, *arg1, *arg2) },
Syscall::Getresuid(arg0, arg1, arg2) => unsafe { syscall3(118, *arg0, *arg1, *arg2) },
Syscall::Setresgid(arg0, arg1, arg2) => unsafe { syscall3(119, *arg0, *arg1, *arg2) },
Syscall::Getresgid(arg0, arg1, arg2) => unsafe { syscall3(120, *arg0, *arg1, *arg2) },
Syscall::Getpgid(arg0) => unsafe { syscall1(121, *arg0) },
Syscall::Setfsuid(arg0) => unsafe { syscall1(122, *arg0) },
Syscall::Setfsgid(arg0) => unsafe { syscall1(123, *arg0) },
Syscall::Getsid(arg0) => unsafe { syscall1(124, *arg0) },
Syscall::Capget(arg0, arg1) => unsafe { syscall2(125, *arg0, *arg1) },
Syscall::Capset(arg0, arg1) => unsafe { syscall2(126, *arg0, *arg1) },
Syscall::RtSigpending(arg0, arg1) => unsafe { syscall2(127, *arg0, *arg1) },
Syscall::RtSigtimedwait(arg0, arg1, arg2, arg3) => unsafe {
syscall4(128, *arg0, *arg1, *arg2, *arg3)
},
Syscall::RtSigqueueinfo(arg0, arg1, arg2) => unsafe { syscall3(129, *arg0, *arg1, *arg2) },
Syscall::RtSigsuspend(arg0, arg1) => unsafe { syscall2(130, *arg0, *arg1) },
Syscall::Sigaltstack(arg0, arg1) => unsafe { syscall2(131, *arg0, *arg1) },
Syscall::Utime(arg0, arg1) => unsafe { syscall2(132, *arg0, *arg1) },
Syscall::Mknod(arg0, arg1, arg2) => unsafe { syscall3(133, *arg0, *arg1, *arg2) },
Syscall::Uselib(arg0) => unsafe { syscall1(134, *arg0) },
Syscall::Personality(arg0) => unsafe { syscall1(135, *arg0) },
Syscall::Ustat(arg0, arg1) => unsafe { syscall2(136, *arg0, *arg1) },
Syscall::Statfs(arg0, arg1) => unsafe { syscall2(137, *arg0, *arg1) },
Syscall::Fstatfs(arg0, arg1) => unsafe { syscall2(138, *arg0, *arg1) },
Syscall::Sysfs(arg0, arg1, arg2) => unsafe { syscall3(139, *arg0, *arg1, *arg2) },
Syscall::Getpriority(arg0, arg1) => unsafe { syscall2(140, *arg0, *arg1) },
Syscall::Setpriority(arg0, arg1, arg2) => unsafe { syscall3(141, *arg0, *arg1, *arg2) },
Syscall::SchedSetparam(arg0, arg1) => unsafe { syscall2(142, *arg0, *arg1) },
Syscall::SchedGetparam(arg0, arg1) => unsafe { syscall2(143, *arg0, *arg1) },
Syscall::SchedSetscheduler(arg0, arg1, arg2) => unsafe {
syscall3(144, *arg0, *arg1, *arg2)
},
Syscall::SchedGetscheduler(arg0) => unsafe { syscall1(145, *arg0) },
Syscall::SchedGetPriorityMax(arg0) => unsafe { syscall1(146, *arg0) },
Syscall::SchedGetPriorityMin(arg0) => unsafe { syscall1(147, *arg0) },
Syscall::SchedRrGetInterval(arg0, arg1) => unsafe { syscall2(148, *arg0, *arg1) },
Syscall::Mlock(arg0, arg1) => unsafe { syscall2(149, *arg0, *arg1) },
Syscall::Munlock(arg0, arg1) => unsafe { syscall2(150, *arg0, *arg1) },
Syscall::Mlockall(arg0) => unsafe { syscall1(151, *arg0) },
Syscall::Munlockall => unsafe { syscall0(152) },
Syscall::Vhangup => unsafe { syscall0(153) },
Syscall::ModifyLdt(arg0, arg1, arg2) => unsafe { syscall3(154, *arg0, *arg1, *arg2) },
Syscall::PivotRoot(arg0, arg1) => unsafe { syscall2(155, *arg0, *arg1) },
Syscall::_Sysctl(arg0) => unsafe { syscall1(156, *arg0) },
Syscall::Prctl(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(157, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::ArchPrctl(arg0, arg1) => unsafe { syscall2(158, *arg0, *arg1) },
Syscall::Adjtimex(arg0) => unsafe { syscall1(159, *arg0) },
Syscall::Setrlimit(arg0, arg1) => unsafe { syscall2(160, *arg0, *arg1) },
Syscall::Chroot(arg0) => unsafe { syscall1(161, *arg0) },
Syscall::Sync => unsafe { syscall0(162) },
Syscall::Acct(arg0) => unsafe { syscall1(163, *arg0) },
Syscall::Settimeofday(arg0, arg1) => unsafe { syscall2(164, *arg0, *arg1) },
Syscall::Mount(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(165, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Umount2(arg0, arg1) => unsafe { syscall2(166, *arg0, *arg1) },
Syscall::Swapon(arg0, arg1) => unsafe { syscall2(167, *arg0, *arg1) },
Syscall::Swapoff(arg0) => unsafe { syscall1(168, *arg0) },
Syscall::Reboot(arg0, arg1, arg2, arg3) => unsafe {
syscall4(169, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Sethostname(arg0, arg1) => unsafe { syscall2(170, *arg0, *arg1) },
Syscall::Setdomainname(arg0, arg1) => unsafe { syscall2(171, *arg0, *arg1) },
Syscall::Iopl(arg0) => unsafe { syscall1(172, *arg0) },
Syscall::Ioperm(arg0, arg1, arg2) => unsafe { syscall3(173, *arg0, *arg1, *arg2) },
Syscall::CreateModule(arg0, arg1) => unsafe { syscall2(174, *arg0, *arg1) },
Syscall::InitModule(arg0, arg1, arg2) => unsafe { syscall3(175, *arg0, *arg1, *arg2) },
Syscall::DeleteModule(arg0, arg1) => unsafe { syscall2(176, *arg0, *arg1) },
Syscall::GetKernelSyms(arg0) => unsafe { syscall1(177, *arg0) },
Syscall::QueryModule(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(178, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Quotactl(arg0, arg1, arg2, arg3) => unsafe {
syscall4(179, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Nfsservctl(arg0, arg1, arg2) => unsafe { syscall3(180, *arg0, *arg1, *arg2) },
Syscall::Getpmsg => unsafe { syscall0(181) },
Syscall::Putpmsg => unsafe { syscall0(182) },
Syscall::AfsSyscall => unsafe { syscall0(183) },
Syscall::Tuxcall => unsafe { syscall0(184) },
Syscall::Security => unsafe { syscall0(185) },
Syscall::Gettid => unsafe { syscall0(186) },
Syscall::Readahead(arg0, arg1, arg2) => unsafe { syscall3(187, *arg0, *arg1, *arg2) },
Syscall::Setxattr(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(188, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Lsetxattr(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(189, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Fsetxattr(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(190, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Getxattr(arg0, arg1, arg2, arg3) => unsafe {
syscall4(191, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Lgetxattr(arg0, arg1, arg2, arg3) => unsafe {
syscall4(192, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Fgetxattr(arg0, arg1, arg2, arg3) => unsafe {
syscall4(193, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Listxattr(arg0, arg1, arg2) => unsafe { syscall3(194, *arg0, *arg1, *arg2) },
Syscall::Llistxattr(arg0, arg1, arg2) => unsafe { syscall3(195, *arg0, *arg1, *arg2) },
Syscall::Flistxattr(arg0, arg1, arg2) => unsafe { syscall3(196, *arg0, *arg1, *arg2) },
Syscall::Removexattr(arg0, arg1) => unsafe { syscall2(197, *arg0, *arg1) },
Syscall::Lremovexattr(arg0, arg1) => unsafe { syscall2(198, *arg0, *arg1) },
Syscall::Fremovexattr(arg0, arg1) => unsafe { syscall2(199, *arg0, *arg1) },
Syscall::Tkill(arg0, arg1) => unsafe { syscall2(200, *arg0, *arg1) },
Syscall::Time(arg0) => unsafe { syscall1(201, *arg0) },
Syscall::Futex(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(202, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5)
},
Syscall::SchedSetaffinity(arg0, arg1, arg2) => unsafe {
syscall3(203, *arg0, *arg1, *arg2)
},
Syscall::SchedGetaffinity(arg0, arg1, arg2) => unsafe {
syscall3(204, *arg0, *arg1, *arg2)
},
Syscall::SetThreadArea(arg0) => unsafe { syscall1(205, *arg0) },
Syscall::IoSetup(arg0, arg1) => unsafe { syscall2(206, *arg0, *arg1) },
Syscall::IoDestroy(arg0) => unsafe { syscall1(207, *arg0) },
Syscall::IoGetevents(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(208, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::IoSubmit(arg0, arg1, arg2) => unsafe { syscall3(209, *arg0, *arg1, *arg2) },
Syscall::IoCancel(arg0, arg1, arg2) => unsafe { syscall3(210, *arg0, *arg1, *arg2) },
Syscall::GetThreadArea(arg0) => unsafe { syscall1(211, *arg0) },
Syscall::LookupDcookie(arg0, arg1, arg2, arg3) => unsafe {
syscall4(212, *arg0, *arg1, *arg2, *arg3)
},
Syscall::EpollCreate(arg0) => unsafe { syscall1(213, *arg0) },
Syscall::EpollCtlOld => unsafe { syscall0(214) },
Syscall::EpollWaitOld => unsafe { syscall0(215) },
Syscall::RemapFilePages(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(216, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Getdents64(arg0, arg1, arg2) => unsafe { syscall3(217, *arg0, *arg1, *arg2) },
Syscall::SetTidAddress(arg0) => unsafe { syscall1(218, *arg0) },
Syscall::RestartSyscall => unsafe { syscall0(219) },
Syscall::Semtimedop(arg0, arg1, arg2, arg3) => unsafe {
syscall4(220, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Fadvise64(arg0, arg1, arg2, arg3) => unsafe {
syscall4(221, *arg0, *arg1, *arg2, *arg3)
},
Syscall::TimerCreate(arg0, arg1, arg2) => unsafe { syscall3(222, *arg0, *arg1, *arg2) },
Syscall::TimerSettime(arg0, arg1, arg2, arg3) => unsafe {
syscall4(223, *arg0, *arg1, *arg2, *arg3)
},
Syscall::TimerGettime(arg0, arg1) => unsafe { syscall2(224, *arg0, *arg1) },
Syscall::TimerGetoverrun(arg0) => unsafe { syscall1(225, *arg0) },
Syscall::TimerDelete(arg0) => unsafe { syscall1(226, *arg0) },
Syscall::ClockSettime(arg0, arg1) => unsafe { syscall2(227, *arg0, *arg1) },
Syscall::ClockGettime(arg0, arg1) => unsafe { syscall2(228, *arg0, *arg1) },
Syscall::ClockGetres(arg0, arg1) => unsafe { syscall2(229, *arg0, *arg1) },
Syscall::ClockNanosleep(arg0, arg1, arg2, arg3) => unsafe {
syscall4(230, *arg0, *arg1, *arg2, *arg3)
},
Syscall::ExitGroup(arg0) => unsafe { syscall1(231, *arg0) },
Syscall::EpollWait(arg0, arg1, arg2, arg3) => unsafe {
syscall4(232, *arg0, *arg1, *arg2, *arg3)
},
Syscall::EpollCtl(arg0, arg1, arg2, arg3) => unsafe {
syscall4(233, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Tgkill(arg0, arg1, arg2) => unsafe { syscall3(234, *arg0, *arg1, *arg2) },
Syscall::Utimes(arg0, arg1) => unsafe { syscall2(235, *arg0, *arg1) },
Syscall::Vserver => unsafe { syscall0(236) },
Syscall::Mbind(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(237, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5)
},
Syscall::SetMempolicy(arg0, arg1, arg2) => unsafe { syscall3(238, *arg0, *arg1, *arg2) },
Syscall::GetMempolicy(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(239, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::MqOpen(arg0, arg1, arg2, arg3) => unsafe {
syscall4(240, *arg0, *arg1, *arg2, *arg3)
},
Syscall::MqUnlink(arg0) => unsafe { syscall1(241, *arg0) },
Syscall::MqTimedsend(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(242, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::MqTimedreceive(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(243, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::MqNotify(arg0, arg1) => unsafe { syscall2(244, *arg0, *arg1) },
Syscall::MqGetsetattr(arg0, arg1, arg2) => unsafe { syscall3(245, *arg0, *arg1, *arg2) },
Syscall::KexecLoad(arg0, arg1, arg2, arg3) => unsafe {
syscall4(246, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Waitid(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(247, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::AddKey(arg0, arg1, arg2, arg3) => unsafe {
syscall4(248, *arg0, *arg1, *arg2, *arg3)
},
Syscall::RequestKey(arg0, arg1, arg2) => unsafe { syscall3(249, *arg0, *arg1, *arg2) },
Syscall::Keyctl(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(250, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::IoprioSet(arg0, arg1, arg2) => unsafe { syscall3(251, *arg0, *arg1, *arg2) },
Syscall::IoprioGet(arg0, arg1) => unsafe { syscall2(252, *arg0, *arg1) },
Syscall::InotifyInit => unsafe { syscall0(253) },
Syscall::InotifyAddWatch(arg0, arg1, arg2) => unsafe { syscall3(254, *arg0, *arg1, *arg2) },
Syscall::InotifyRmWatch(arg0, arg1) => unsafe { syscall2(255, *arg0, *arg1) },
Syscall::MigratePages(arg0, arg1, arg2, arg3) => unsafe {
syscall4(256, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Openat(arg0, arg1, arg2, arg3) => unsafe {
syscall4(257, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Mkdirat(arg0, arg1, arg2) => unsafe { syscall3(258, *arg0, *arg1, *arg2) },
Syscall::Mknodat(arg0, arg1, arg2, arg3) => unsafe {
syscall4(259, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Fchownat(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(260, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Futimesat(arg0, arg1, arg2) => unsafe { syscall3(261, *arg0, *arg1, *arg2) },
Syscall::Newfstatat(arg0, arg1, arg2, arg3) => unsafe {
syscall4(262, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Unlinkat(arg0, arg1, arg2) => unsafe { syscall3(263, *arg0, *arg1, *arg2) },
Syscall::Renameat(arg0, arg1, arg2, arg3) => unsafe {
syscall4(264, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Linkat(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(265, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Symlinkat(arg0, arg1, arg2) => unsafe { syscall3(266, *arg0, *arg1, *arg2) },
Syscall::Readlinkat(arg0, arg1, arg2, arg3) => unsafe {
syscall4(267, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Fchmodat(arg0, arg1, arg2) => unsafe { syscall3(268, *arg0, *arg1, *arg2) },
Syscall::Faccessat(arg0, arg1, arg2) => unsafe { syscall3(269, *arg0, *arg1, *arg2) },
Syscall::Pselect6(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(270, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5)
},
Syscall::Ppoll(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(271, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Unshare(arg0) => unsafe { syscall1(272, *arg0) },
Syscall::SetRobustList(arg0, arg1) => unsafe { syscall2(273, *arg0, *arg1) },
Syscall::GetRobustList(arg0, arg1, arg2) => unsafe { syscall3(274, *arg0, *arg1, *arg2) },
Syscall::Splice(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(275, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5)
},
Syscall::Tee(arg0, arg1, arg2, arg3) => unsafe {
syscall4(276, *arg0, *arg1, *arg2, *arg3)
},
Syscall::SyncFileRange(arg0, arg1, arg2, arg3) => unsafe {
syscall4(277, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Vmsplice(arg0, arg1, arg2, arg3) => unsafe {
syscall4(278, *arg0, *arg1, *arg2, *arg3)
},
Syscall::MovePages(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(279, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5)
},
Syscall::Utimensat(arg0, arg1, arg2, arg3) => unsafe {
syscall4(280, *arg0, *arg1, *arg2, *arg3)
},
Syscall::EpollPwait(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(281, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5)
},
Syscall::Signalfd(arg0, arg1, arg2) => unsafe { syscall3(282, *arg0, *arg1, *arg2) },
Syscall::TimerfdCreate(arg0, arg1) => unsafe { syscall2(283, *arg0, *arg1) },
Syscall::Eventfd(arg0, arg1) => unsafe { syscall2(284, *arg0, *arg1) },
Syscall::Fallocate(arg0, arg1, arg2, arg3) => unsafe {
syscall4(285, *arg0, *arg1, *arg2, *arg3)
},
Syscall::TimerfdSettime(arg0, arg1, arg2, arg3) => unsafe {
syscall4(286, *arg0, *arg1, *arg2, *arg3)
},
Syscall::TimerfdGettime(arg0, arg1) => unsafe { syscall2(287, *arg0, *arg1) },
Syscall::Accept4(arg0, arg1, arg2, arg3) => unsafe {
syscall4(288, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Signalfd4(arg0, arg1, arg2, arg3) => unsafe {
syscall4(289, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Eventfd2(arg0, arg1) => unsafe { syscall2(290, *arg0, *arg1) },
Syscall::EpollCreate1(arg0) => unsafe { syscall1(291, *arg0) },
Syscall::Dup3(arg0, arg1, arg2) => unsafe { syscall3(292, *arg0, *arg1, *arg2) },
Syscall::Pipe2(arg0, arg1) => unsafe { syscall2(293, *arg0, *arg1) },
Syscall::InotifyInit1(arg0) => unsafe { syscall1(294, *arg0) },
Syscall::Preadv(arg0, arg1, arg2, arg3) => unsafe {
syscall4(295, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Pwritev(arg0, arg1, arg2, arg3) => unsafe {
syscall4(296, *arg0, *arg1, *arg2, *arg3)
},
Syscall::RtTgsigqueueinfo(arg0, arg1, arg2, arg3) => unsafe {
syscall4(297, *arg0, *arg1, *arg2, *arg3)
},
Syscall::PerfEventOpen(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(298, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Recvmmsg(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(299, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::FanotifyInit(arg0, arg1) => unsafe { syscall2(300, *arg0, *arg1) },
Syscall::FanotifyMark(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(301, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Prlimit64(arg0, arg1, arg2, arg3) => unsafe {
syscall4(302, *arg0, *arg1, *arg2, *arg3)
},
Syscall::NameToHandleAt(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(303, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::OpenByHandleAt(arg0, arg1, arg2) => unsafe { syscall3(304, *arg0, *arg1, *arg2) },
Syscall::ClockAdjtime(arg0, arg1) => unsafe { syscall2(305, *arg0, *arg1) },
Syscall::Syncfs(arg0) => unsafe { syscall1(306, *arg0) },
Syscall::Sendmmsg(arg0, arg1, arg2, arg3) => unsafe {
syscall4(307, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Setns(arg0, arg1) => unsafe { syscall2(308, *arg0, *arg1) },
Syscall::Getcpu(arg0, arg1, arg2) => unsafe { syscall3(309, *arg0, *arg1, *arg2) },
Syscall::ProcessVmReadv(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(310, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5)
},
Syscall::ProcessVmWritev(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(311, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5)
},
Syscall::Kcmp(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(312, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::FinitModule(arg0, arg1, arg2) => unsafe { syscall3(313, *arg0, *arg1, *arg2) },
Syscall::SchedSetattr(arg0, arg1, arg2) => unsafe { syscall3(314, *arg0, *arg1, *arg2) },
Syscall::SchedGetattr(arg0, arg1, arg2, arg3) => unsafe {
syscall4(315, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Renameat2(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(316, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Seccomp(arg0, arg1, arg2) => unsafe { syscall3(317, *arg0, *arg1, *arg2) },
Syscall::Getrandom(arg0, arg1, arg2) => unsafe { syscall3(318, *arg0, *arg1, *arg2) },
Syscall::MemfdCreate(arg0, arg1) => unsafe { syscall2(319, *arg0, *arg1) },
Syscall::KexecFileLoad(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(320, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Bpf(arg0, arg1, arg2) => unsafe { syscall3(321, *arg0, *arg1, *arg2) },
Syscall::Execveat(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(322, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Userfaultfd(arg0) => unsafe { syscall1(323, *arg0) },
Syscall::Membarrier(arg0, arg1) => unsafe { syscall2(324, *arg0, *arg1) },
Syscall::Mlock2(arg0, arg1, arg2) => unsafe { syscall3(325, *arg0, *arg1, *arg2) },
Syscall::CopyFileRange(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(326, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5)
},
Syscall::Preadv2(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(327, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Pwritev2(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(328, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::PkeyMprotect(arg0, arg1, arg2, arg3) => unsafe {
syscall4(329, *arg0, *arg1, *arg2, *arg3)
},
Syscall::PkeyAlloc(arg0, arg1) => unsafe { syscall2(330, *arg0, *arg1) },
Syscall::PkeyFree(arg0) => unsafe { syscall1(331, *arg0) },
Syscall::Statx(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(332, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::IoPgetevents(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe {
syscall6(333, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5)
},
Syscall::Rseq(arg0, arg1, arg2, arg3) => unsafe {
syscall4(334, *arg0, *arg1, *arg2, *arg3)
},
Syscall::PidfdSendSignal(arg0, arg1, arg2, arg3) => unsafe {
syscall4(424, *arg0, *arg1, *arg2, *arg3)
},
Syscall::IoUringSetup(arg0, arg1) => unsafe { syscall2(425, *arg0, *arg1) },
Syscall::IoUringEnter(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(426, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::IoUringRegister(arg0, arg1, arg2, arg3) => unsafe {
syscall4(427, *arg0, *arg1, *arg2, *arg3)
},
Syscall::OpenTree(arg0, arg1, arg2) => unsafe { syscall3(428, *arg0, *arg1, *arg2) },
Syscall::MoveMount(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(429, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Fsopen(arg0, arg1, arg2) => unsafe { syscall3(430, *arg0, *arg1, *arg2) },
Syscall::Fsconfig(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(431, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Fsmount(arg0, arg1, arg2) => unsafe { syscall3(432, *arg0, *arg1, *arg2) },
Syscall::Fspick(arg0, arg1, arg2) => unsafe { syscall3(433, *arg0, *arg1, *arg2) },
Syscall::PidfdOpen(arg0, arg1) => unsafe { syscall2(434, *arg0, *arg1) },
Syscall::Clone3(arg0, arg1) => unsafe { syscall2(435, *arg0, *arg1) },
Syscall::CloseRange(arg0, arg1, arg2) => unsafe { syscall3(436, *arg0, *arg1, *arg2) },
Syscall::Openat2(arg0, arg1, arg2, arg3) => unsafe {
syscall4(437, *arg0, *arg1, *arg2, *arg3)
},
Syscall::PidfdGetfd(arg0, arg1, arg2) => unsafe { syscall3(438, *arg0, *arg1, *arg2) },
Syscall::Faccessat2(arg0, arg1, arg2, arg3) => unsafe {
syscall4(439, *arg0, *arg1, *arg2, *arg3)
},
Syscall::ProcessMadvise(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(440, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::EpollPwait2(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(441, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::MountSetattr(arg0, arg1, arg2, arg3) => unsafe {
syscall4(442, *arg0, *arg1, *arg2, *arg3)
},
Syscall::QuotactlFd(arg0, arg1, arg2, arg3) => unsafe {
syscall4(443, *arg0, *arg1, *arg2, *arg3)
},
Syscall::LandlockCreateRuleset(arg0, arg1, arg2) => unsafe {
syscall3(444, *arg0, *arg1, *arg2)
},
Syscall::LandlockAddRule(arg0, arg1, arg2, arg3) => unsafe {
syscall4(445, *arg0, *arg1, *arg2, *arg3)
},
Syscall::LandlockRestrictSelf(arg0, arg1) => unsafe { syscall2(446, *arg0, *arg1) },
Syscall::MemfdSecret(arg0) => unsafe { syscall1(447, *arg0) },
Syscall::ProcessMrelease(arg0, arg1) => unsafe { syscall2(448, *arg0, *arg1) },
Syscall::FutexWaitv(arg0, arg1, arg2) => unsafe { syscall3(449, *arg0, *arg1, *arg2) },
Syscall::SetMempolicyHomeNode(arg0, arg1, arg2) => unsafe {
syscall3(450, *arg0, *arg1, *arg2)
},
Syscall::Cachestat(arg0, arg1, arg2, arg3, arg4) => unsafe {
syscall5(451, *arg0, *arg1, *arg2, *arg3, *arg4)
},
Syscall::Fchmodat2(arg0, arg1, arg2, arg3) => unsafe {
syscall4(452, *arg0, *arg1, *arg2, *arg3)
},
Syscall::MapShadowStack(arg0, arg1) => unsafe { syscall2(453, *arg0, *arg1) },
Syscall::FutexWake(arg0, arg1, arg2) => unsafe { syscall3(454, *arg0, *arg1, *arg2) },
Syscall::FutexWait(arg0, arg1, arg2) => unsafe { syscall3(455, *arg0, *arg1, *arg2) },
Syscall::FutexRequeue(arg0, arg1, arg2, arg3) => unsafe {
syscall4(456, *arg0, *arg1, *arg2, *arg3)
},
Syscall::Statmount(arg0, arg1, arg2) => unsafe { syscall3(457, *arg0, *arg1, *arg2) },
Syscall::Listmount(arg0, arg1, arg2) => unsafe { syscall3(458, *arg0, *arg1, *arg2) },
Syscall::LsmGetSelfAttr(arg0, arg1, arg2, arg3) => unsafe {
syscall4(459, *arg0, *arg1, *arg2, *arg3)
},
Syscall::LsmSetSelfAttr(arg0, arg1, arg2) => unsafe { syscall3(460, *arg0, *arg1, *arg2) },
Syscall::LsmListModules(arg0, arg1) => unsafe { syscall2(461, *arg0, *arg1) },
Syscall::Unknown(syscall_num, args) => match args {
[arg0, arg1, arg2, arg3, arg4, arg5] => unsafe {
syscall6(*syscall_num, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5)
},
_ => unreachable!(),
},
}
}
+8 -8
View File
@@ -2,7 +2,7 @@
unsafe extern "C" { unsafe extern "C" {
static mut intercept_hook_point: Option<HookFn>; static mut intercept_hook_point: Option<HookFn>;
pub fn syscall_no_intercept(num: isize, ...) -> isize; pub fn syscall_no_intercept(num: usize, ...) -> isize;
} }
/// Set syscall intercept hook function. /// Set syscall intercept hook function.
@@ -29,13 +29,13 @@ pub unsafe fn unset_hook_fn() {
/// The type of hook function. /// The type of hook function.
pub type HookFn = extern "C" fn( pub type HookFn = extern "C" fn(
num: isize, num: usize,
a0: isize, a0: usize,
a1: isize, a1: usize,
a2: isize, a2: usize,
a3: isize, a3: usize,
a4: isize, a4: usize,
a5: isize, a5: usize,
result: &mut isize, result: &mut isize,
) -> InterceptResult; ) -> InterceptResult;
-3167
View File
File diff suppressed because it is too large Load Diff
+7
View File
@@ -0,0 +1,7 @@
[package]
name = "syscall_lib"
version = "0.1.0"
edition = "2024"
[dependencies]
bincode = "2.0.1"
+402
View File
@@ -0,0 +1,402 @@
use crate::{Syscall, Sysno};
/// Creates a `Syscall` enum from a system call number and an array of arguments.
///
/// This function matches the provided `syscall_num` to a `Sysno` variant
/// and constructs the corresponding `Syscall` enum variant with the arguments.
/// If the system call number is unknown, it returns a `Syscall::Unknown` variant.
///
/// # Arguments
///
/// * `syscall_num`: The system call number as an `isize`.
/// * `args`: An array of six `isize` values representing the system call's arguments.
///
/// # Returns
///
/// A `Syscall` enum variant.
pub fn create_syscall(syscall_num: usize, args: [usize; 6]) -> Syscall {
let (arg0, arg1, arg2, arg3, arg4, arg5) =
(args[0], args[1], args[2], args[3], args[4], args[5]);
// We can't simply match on the `isize` because of the non-contiguous
// syscall numbers, like `pidfd_send_signal`. A simple `match` statement
// requires all variants to be handled, and this is a lot of code.
// Instead we can use a `match` on the `Sysno` enum, which is more
// exhaustive and less error-prone.
match unsafe { std::mem::transmute::<i32, Sysno>(syscall_num as i32) } {
Sysno::read => Syscall::Read(arg0, arg1, arg2),
Sysno::write => Syscall::Write(arg0, arg1, arg2),
Sysno::open => Syscall::Open(arg0, arg1, arg2),
Sysno::close => Syscall::Close(arg0),
Sysno::stat => Syscall::Stat(arg0, arg1),
Sysno::fstat => Syscall::Fstat(arg0, arg1),
Sysno::lstat => Syscall::Lstat(arg0, arg1),
Sysno::poll => Syscall::Poll(arg0, arg1, arg2),
Sysno::lseek => Syscall::Lseek(arg0, arg1, arg2),
Sysno::mmap => Syscall::Mmap(arg0, arg1, arg2, arg3, arg4, arg5),
Sysno::mprotect => Syscall::Mprotect(arg0, arg1, arg2),
Sysno::munmap => Syscall::Munmap(arg0, arg1),
Sysno::brk => Syscall::Brk(arg0),
Sysno::rt_sigaction => Syscall::RtSigaction(arg0, arg1, arg2, arg3),
Sysno::rt_sigprocmask => Syscall::RtSigprocmask(arg0, arg1, arg2, arg3),
Sysno::rt_sigreturn => Syscall::RtSigreturn,
Sysno::ioctl => Syscall::Ioctl(arg0, arg1, arg2),
Sysno::pread64 => Syscall::Pread64(arg0, arg1, arg2, arg3),
Sysno::pwrite64 => Syscall::Pwrite64(arg0, arg1, arg2, arg3),
Sysno::readv => Syscall::Readv(arg0, arg1, arg2),
Sysno::writev => Syscall::Writev(arg0, arg1, arg2),
Sysno::access => Syscall::Access(arg0, arg1),
Sysno::pipe => Syscall::Pipe(arg0),
Sysno::select => Syscall::Select(arg0, arg1, arg2, arg3, arg4),
Sysno::sched_yield => Syscall::SchedYield,
Sysno::mremap => Syscall::Mremap(arg0, arg1, arg2, arg3, arg4),
Sysno::msync => Syscall::Msync(arg0, arg1, arg2),
Sysno::mincore => Syscall::Mincore(arg0, arg1, arg2),
Sysno::madvise => Syscall::Madvise(arg0, arg1, arg2),
Sysno::shmget => Syscall::Shmget(arg0, arg1, arg2),
Sysno::shmat => Syscall::Shmat(arg0, arg1, arg2),
Sysno::shmctl => Syscall::Shmctl(arg0, arg1, arg2),
Sysno::dup => Syscall::Dup(arg0),
Sysno::dup2 => Syscall::Dup2(arg0, arg1),
Sysno::pause => Syscall::Pause,
Sysno::nanosleep => Syscall::Nanosleep(arg0, arg1),
Sysno::getitimer => Syscall::Getitimer(arg0, arg1),
Sysno::alarm => Syscall::Alarm(arg0),
Sysno::setitimer => Syscall::Setitimer(arg0, arg1, arg2),
Sysno::getpid => Syscall::Getpid,
Sysno::sendfile => Syscall::Sendfile(arg0, arg1, arg2, arg3),
Sysno::socket => Syscall::Socket(arg0, arg1, arg2),
Sysno::connect => Syscall::Connect(arg0, arg1, arg2),
Sysno::accept => Syscall::Accept(arg0, arg1, arg2),
Sysno::sendto => Syscall::Sendto(arg0, arg1, arg2, arg3, arg4, arg5),
Sysno::recvfrom => Syscall::Recvfrom(arg0, arg1, arg2, arg3, arg4, arg5),
Sysno::sendmsg => Syscall::Sendmsg(arg0, arg1, arg2),
Sysno::recvmsg => Syscall::Recvmsg(arg0, arg1, arg2),
Sysno::shutdown => Syscall::Shutdown(arg0, arg1),
Sysno::bind => Syscall::Bind(arg0, arg1, arg2),
Sysno::listen => Syscall::Listen(arg0, arg1),
Sysno::getsockname => Syscall::Getsockname(arg0, arg1, arg2),
Sysno::getpeername => Syscall::Getpeername(arg0, arg1, arg2),
Sysno::socketpair => Syscall::Socketpair(arg0, arg1, arg2, arg3),
Sysno::setsockopt => Syscall::Setsockopt(arg0, arg1, arg2, arg3, arg4),
Sysno::getsockopt => Syscall::Getsockopt(arg0, arg1, arg2, arg3, arg4),
Sysno::clone => Syscall::Clone(arg0, arg1, arg2, arg3, arg4),
Sysno::fork => Syscall::Fork,
Sysno::vfork => Syscall::Vfork,
Sysno::execve => Syscall::Execve(arg0, arg1, arg2),
Sysno::exit => Syscall::Exit(arg0),
Sysno::wait4 => Syscall::Wait4(arg0, arg1, arg2, arg3),
Sysno::kill => Syscall::Kill(arg0, arg1),
Sysno::uname => Syscall::Uname(arg0),
Sysno::semget => Syscall::Semget(arg0, arg1, arg2),
Sysno::semop => Syscall::Semop(arg0, arg1, arg2),
Sysno::semctl => Syscall::Semctl(arg0, arg1, arg2, arg3),
Sysno::shmdt => Syscall::Shmdt(arg0),
Sysno::msgget => Syscall::Msgget(arg0, arg1),
Sysno::msgsnd => Syscall::Msgsnd(arg0, arg1, arg2, arg3),
Sysno::msgrcv => Syscall::Msgrcv(arg0, arg1, arg2, arg3, arg4),
Sysno::msgctl => Syscall::Msgctl(arg0, arg1, arg2),
Sysno::fcntl => Syscall::Fcntl(arg0, arg1, arg2),
Sysno::flock => Syscall::Flock(arg0, arg1),
Sysno::fsync => Syscall::Fsync(arg0),
Sysno::fdatasync => Syscall::Fdatasync(arg0),
Sysno::truncate => Syscall::Truncate(arg0, arg1),
Sysno::ftruncate => Syscall::Ftruncate(arg0, arg1),
Sysno::getdents => Syscall::Getdents(arg0, arg1, arg2),
Sysno::getcwd => Syscall::Getcwd(arg0, arg1),
Sysno::chdir => Syscall::Chdir(arg0),
Sysno::fchdir => Syscall::Fchdir(arg0),
Sysno::rename => Syscall::Rename(arg0, arg1),
Sysno::mkdir => Syscall::Mkdir(arg0, arg1),
Sysno::rmdir => Syscall::Rmdir(arg0),
Sysno::creat => Syscall::Creat(arg0, arg1),
Sysno::link => Syscall::Link(arg0, arg1),
Sysno::unlink => Syscall::Unlink(arg0),
Sysno::symlink => Syscall::Symlink(arg0, arg1),
Sysno::readlink => Syscall::Readlink(arg0, arg1, arg2),
Sysno::chmod => Syscall::Chmod(arg0, arg1),
Sysno::fchmod => Syscall::Fchmod(arg0, arg1),
Sysno::chown => Syscall::Chown(arg0, arg1, arg2),
Sysno::fchown => Syscall::Fchown(arg0, arg1, arg2),
Sysno::lchown => Syscall::Lchown(arg0, arg1, arg2),
Sysno::umask => Syscall::Umask(arg0),
Sysno::gettimeofday => Syscall::Gettimeofday(arg0, arg1),
Sysno::getrlimit => Syscall::Getrlimit(arg0, arg1),
Sysno::getrusage => Syscall::Getrusage(arg0, arg1),
Sysno::sysinfo => Syscall::Sysinfo(arg0),
Sysno::times => Syscall::Times(arg0),
Sysno::ptrace => Syscall::Ptrace(arg0, arg1, arg2, arg3),
Sysno::getuid => Syscall::Getuid,
Sysno::syslog => Syscall::Syslog(arg0, arg1, arg2),
Sysno::getgid => Syscall::Getgid,
Sysno::setuid => Syscall::Setuid(arg0),
Sysno::setgid => Syscall::Setgid(arg0),
Sysno::geteuid => Syscall::Geteuid,
Sysno::getegid => Syscall::Getegid,
Sysno::setpgid => Syscall::Setpgid(arg0, arg1),
Sysno::getppid => Syscall::Getppid,
Sysno::getpgrp => Syscall::Getpgrp,
Sysno::setsid => Syscall::Setsid,
Sysno::setreuid => Syscall::Setreuid(arg0, arg1),
Sysno::setregid => Syscall::Setregid(arg0, arg1),
Sysno::getgroups => Syscall::Getgroups(arg0, arg1),
Sysno::setgroups => Syscall::Setgroups(arg0, arg1),
Sysno::setresuid => Syscall::Setresuid(arg0, arg1, arg2),
Sysno::getresuid => Syscall::Getresuid(arg0, arg1, arg2),
Sysno::setresgid => Syscall::Setresgid(arg0, arg1, arg2),
Sysno::getresgid => Syscall::Getresgid(arg0, arg1, arg2),
Sysno::getpgid => Syscall::Getpgid(arg0),
Sysno::setfsuid => Syscall::Setfsuid(arg0),
Sysno::setfsgid => Syscall::Setfsgid(arg0),
Sysno::getsid => Syscall::Getsid(arg0),
Sysno::capget => Syscall::Capget(arg0, arg1),
Sysno::capset => Syscall::Capset(arg0, arg1),
Sysno::rt_sigpending => Syscall::RtSigpending(arg0, arg1),
Sysno::rt_sigtimedwait => Syscall::RtSigtimedwait(arg0, arg1, arg2, arg3),
Sysno::rt_sigqueueinfo => Syscall::RtSigqueueinfo(arg0, arg1, arg2),
Sysno::rt_sigsuspend => Syscall::RtSigsuspend(arg0, arg1),
Sysno::sigaltstack => Syscall::Sigaltstack(arg0, arg1),
Sysno::utime => Syscall::Utime(arg0, arg1),
Sysno::mknod => Syscall::Mknod(arg0, arg1, arg2),
Sysno::uselib => Syscall::Uselib(arg0),
Sysno::personality => Syscall::Personality(arg0),
Sysno::ustat => Syscall::Ustat(arg0, arg1),
Sysno::statfs => Syscall::Statfs(arg0, arg1),
Sysno::fstatfs => Syscall::Fstatfs(arg0, arg1),
Sysno::sysfs => Syscall::Sysfs(arg0, arg1, arg2),
Sysno::getpriority => Syscall::Getpriority(arg0, arg1),
Sysno::setpriority => Syscall::Setpriority(arg0, arg1, arg2),
Sysno::sched_setparam => Syscall::SchedSetparam(arg0, arg1),
Sysno::sched_getparam => Syscall::SchedGetparam(arg0, arg1),
Sysno::sched_setscheduler => Syscall::SchedSetscheduler(arg0, arg1, arg2),
Sysno::sched_getscheduler => Syscall::SchedGetscheduler(arg0),
Sysno::sched_get_priority_max => Syscall::SchedGetPriorityMax(arg0),
Sysno::sched_get_priority_min => Syscall::SchedGetPriorityMin(arg0),
Sysno::sched_rr_get_interval => Syscall::SchedRrGetInterval(arg0, arg1),
Sysno::mlock => Syscall::Mlock(arg0, arg1),
Sysno::munlock => Syscall::Munlock(arg0, arg1),
Sysno::mlockall => Syscall::Mlockall(arg0),
Sysno::munlockall => Syscall::Munlockall,
Sysno::vhangup => Syscall::Vhangup,
Sysno::modify_ldt => Syscall::ModifyLdt(arg0, arg1, arg2),
Sysno::pivot_root => Syscall::PivotRoot(arg0, arg1),
Sysno::_sysctl => Syscall::_Sysctl(arg0),
Sysno::prctl => Syscall::Prctl(arg0, arg1, arg2, arg3, arg4),
Sysno::arch_prctl => Syscall::ArchPrctl(arg0, arg1),
Sysno::adjtimex => Syscall::Adjtimex(arg0),
Sysno::setrlimit => Syscall::Setrlimit(arg0, arg1),
Sysno::chroot => Syscall::Chroot(arg0),
Sysno::sync => Syscall::Sync,
Sysno::acct => Syscall::Acct(arg0),
Sysno::settimeofday => Syscall::Settimeofday(arg0, arg1),
Sysno::mount => Syscall::Mount(arg0, arg1, arg2, arg3, arg4),
Sysno::umount2 => Syscall::Umount2(arg0, arg1),
Sysno::swapon => Syscall::Swapon(arg0, arg1),
Sysno::swapoff => Syscall::Swapoff(arg0),
Sysno::reboot => Syscall::Reboot(arg0, arg1, arg2, arg3),
Sysno::sethostname => Syscall::Sethostname(arg0, arg1),
Sysno::setdomainname => Syscall::Setdomainname(arg0, arg1),
Sysno::iopl => Syscall::Iopl(arg0),
Sysno::ioperm => Syscall::Ioperm(arg0, arg1, arg2),
Sysno::create_module => Syscall::CreateModule(arg0, arg1),
Sysno::init_module => Syscall::InitModule(arg0, arg1, arg2),
Sysno::delete_module => Syscall::DeleteModule(arg0, arg1),
Sysno::get_kernel_syms => Syscall::GetKernelSyms(arg0),
Sysno::query_module => Syscall::QueryModule(arg0, arg1, arg2, arg3, arg4),
Sysno::quotactl => Syscall::Quotactl(arg0, arg1, arg2, arg3),
Sysno::nfsservctl => Syscall::Nfsservctl(arg0, arg1, arg2),
Sysno::getpmsg => Syscall::Getpmsg,
Sysno::putpmsg => Syscall::Putpmsg,
Sysno::afs_syscall => Syscall::AfsSyscall,
Sysno::tuxcall => Syscall::Tuxcall,
Sysno::security => Syscall::Security,
Sysno::gettid => Syscall::Gettid,
Sysno::readahead => Syscall::Readahead(arg0, arg1, arg2),
Sysno::setxattr => Syscall::Setxattr(arg0, arg1, arg2, arg3, arg4),
Sysno::lsetxattr => Syscall::Lsetxattr(arg0, arg1, arg2, arg3, arg4),
Sysno::fsetxattr => Syscall::Fsetxattr(arg0, arg1, arg2, arg3, arg4),
Sysno::getxattr => Syscall::Getxattr(arg0, arg1, arg2, arg3),
Sysno::lgetxattr => Syscall::Lgetxattr(arg0, arg1, arg2, arg3),
Sysno::fgetxattr => Syscall::Fgetxattr(arg0, arg1, arg2, arg3),
Sysno::listxattr => Syscall::Listxattr(arg0, arg1, arg2),
Sysno::llistxattr => Syscall::Llistxattr(arg0, arg1, arg2),
Sysno::flistxattr => Syscall::Flistxattr(arg0, arg1, arg2),
Sysno::removexattr => Syscall::Removexattr(arg0, arg1),
Sysno::lremovexattr => Syscall::Lremovexattr(arg0, arg1),
Sysno::fremovexattr => Syscall::Fremovexattr(arg0, arg1),
Sysno::tkill => Syscall::Tkill(arg0, arg1),
Sysno::time => Syscall::Time(arg0),
Sysno::futex => Syscall::Futex(arg0, arg1, arg2, arg3, arg4, arg5),
Sysno::sched_setaffinity => Syscall::SchedSetaffinity(arg0, arg1, arg2),
Sysno::sched_getaffinity => Syscall::SchedGetaffinity(arg0, arg1, arg2),
Sysno::set_thread_area => Syscall::SetThreadArea(arg0),
Sysno::io_setup => Syscall::IoSetup(arg0, arg1),
Sysno::io_destroy => Syscall::IoDestroy(arg0),
Sysno::io_getevents => Syscall::IoGetevents(arg0, arg1, arg2, arg3, arg4),
Sysno::io_submit => Syscall::IoSubmit(arg0, arg1, arg2),
Sysno::io_cancel => Syscall::IoCancel(arg0, arg1, arg2),
Sysno::get_thread_area => Syscall::GetThreadArea(arg0),
Sysno::lookup_dcookie => Syscall::LookupDcookie(arg0, arg1, arg2, arg3),
Sysno::epoll_create => Syscall::EpollCreate(arg0),
Sysno::epoll_ctl_old => Syscall::EpollCtlOld,
Sysno::epoll_wait_old => Syscall::EpollWaitOld,
Sysno::remap_file_pages => Syscall::RemapFilePages(arg0, arg1, arg2, arg3, arg4),
Sysno::getdents64 => Syscall::Getdents64(arg0, arg1, arg2),
Sysno::set_tid_address => Syscall::SetTidAddress(arg0),
Sysno::restart_syscall => Syscall::RestartSyscall,
Sysno::semtimedop => Syscall::Semtimedop(arg0, arg1, arg2, arg3),
Sysno::fadvise64 => Syscall::Fadvise64(arg0, arg1, arg2, arg3),
Sysno::timer_create => Syscall::TimerCreate(arg0, arg1, arg2),
Sysno::timer_settime => Syscall::TimerSettime(arg0, arg1, arg2, arg3),
Sysno::timer_gettime => Syscall::TimerGettime(arg0, arg1),
Sysno::timer_getoverrun => Syscall::TimerGetoverrun(arg0),
Sysno::timer_delete => Syscall::TimerDelete(arg0),
Sysno::clock_settime => Syscall::ClockSettime(arg0, arg1),
Sysno::clock_gettime => Syscall::ClockGettime(arg0, arg1),
Sysno::clock_getres => Syscall::ClockGetres(arg0, arg1),
Sysno::clock_nanosleep => Syscall::ClockNanosleep(arg0, arg1, arg2, arg3),
Sysno::exit_group => Syscall::ExitGroup(arg0),
Sysno::epoll_wait => Syscall::EpollWait(arg0, arg1, arg2, arg3),
Sysno::epoll_ctl => Syscall::EpollCtl(arg0, arg1, arg2, arg3),
Sysno::tgkill => Syscall::Tgkill(arg0, arg1, arg2),
Sysno::utimes => Syscall::Utimes(arg0, arg1),
Sysno::vserver => Syscall::Vserver,
Sysno::mbind => Syscall::Mbind(arg0, arg1, arg2, arg3, arg4, arg5),
Sysno::set_mempolicy => Syscall::SetMempolicy(arg0, arg1, arg2),
Sysno::get_mempolicy => Syscall::GetMempolicy(arg0, arg1, arg2, arg3, arg4),
Sysno::mq_open => Syscall::MqOpen(arg0, arg1, arg2, arg3),
Sysno::mq_unlink => Syscall::MqUnlink(arg0),
Sysno::mq_timedsend => Syscall::MqTimedsend(arg0, arg1, arg2, arg3, arg4),
Sysno::mq_timedreceive => Syscall::MqTimedreceive(arg0, arg1, arg2, arg3, arg4),
Sysno::mq_notify => Syscall::MqNotify(arg0, arg1),
Sysno::mq_getsetattr => Syscall::MqGetsetattr(arg0, arg1, arg2),
Sysno::kexec_load => Syscall::KexecLoad(arg0, arg1, arg2, arg3),
Sysno::waitid => Syscall::Waitid(arg0, arg1, arg2, arg3, arg4),
Sysno::add_key => Syscall::AddKey(arg0, arg1, arg2, arg3),
Sysno::request_key => Syscall::RequestKey(arg0, arg1, arg2),
Sysno::keyctl => Syscall::Keyctl(arg0, arg1, arg2, arg3, arg4),
Sysno::ioprio_set => Syscall::IoprioSet(arg0, arg1, arg2),
Sysno::ioprio_get => Syscall::IoprioGet(arg0, arg1),
Sysno::inotify_init => Syscall::InotifyInit,
Sysno::inotify_add_watch => Syscall::InotifyAddWatch(arg0, arg1, arg2),
Sysno::inotify_rm_watch => Syscall::InotifyRmWatch(arg0, arg1),
Sysno::migrate_pages => Syscall::MigratePages(arg0, arg1, arg2, arg3),
Sysno::openat => Syscall::Openat(arg0, arg1, arg2, arg3),
Sysno::mkdirat => Syscall::Mkdirat(arg0, arg1, arg2),
Sysno::mknodat => Syscall::Mknodat(arg0, arg1, arg2, arg3),
Sysno::fchownat => Syscall::Fchownat(arg0, arg1, arg2, arg3, arg4),
Sysno::futimesat => Syscall::Futimesat(arg0, arg1, arg2),
Sysno::newfstatat => Syscall::Newfstatat(arg0, arg1, arg2, arg3),
Sysno::unlinkat => Syscall::Unlinkat(arg0, arg1, arg2),
Sysno::renameat => Syscall::Renameat(arg0, arg1, arg2, arg3),
Sysno::linkat => Syscall::Linkat(arg0, arg1, arg2, arg3, arg4),
Sysno::symlinkat => Syscall::Symlinkat(arg0, arg1, arg2),
Sysno::readlinkat => Syscall::Readlinkat(arg0, arg1, arg2, arg3),
Sysno::fchmodat => Syscall::Fchmodat(arg0, arg1, arg2),
Sysno::faccessat => Syscall::Faccessat(arg0, arg1, arg2),
Sysno::pselect6 => Syscall::Pselect6(arg0, arg1, arg2, arg3, arg4, arg5),
Sysno::ppoll => Syscall::Ppoll(arg0, arg1, arg2, arg3, arg4),
Sysno::unshare => Syscall::Unshare(arg0),
Sysno::set_robust_list => Syscall::SetRobustList(arg0, arg1),
Sysno::get_robust_list => Syscall::GetRobustList(arg0, arg1, arg2),
Sysno::splice => Syscall::Splice(arg0, arg1, arg2, arg3, arg4, arg5),
Sysno::tee => Syscall::Tee(arg0, arg1, arg2, arg3),
Sysno::sync_file_range => Syscall::SyncFileRange(arg0, arg1, arg2, arg3),
Sysno::vmsplice => Syscall::Vmsplice(arg0, arg1, arg2, arg3),
Sysno::move_pages => Syscall::MovePages(arg0, arg1, arg2, arg3, arg4, arg5),
Sysno::utimensat => Syscall::Utimensat(arg0, arg1, arg2, arg3),
Sysno::epoll_pwait => Syscall::EpollPwait(arg0, arg1, arg2, arg3, arg4, arg5),
Sysno::signalfd => Syscall::Signalfd(arg0, arg1, arg2),
Sysno::timerfd_create => Syscall::TimerfdCreate(arg0, arg1),
Sysno::eventfd => Syscall::Eventfd(arg0, arg1),
Sysno::fallocate => Syscall::Fallocate(arg0, arg1, arg2, arg3),
Sysno::timerfd_settime => Syscall::TimerfdSettime(arg0, arg1, arg2, arg3),
Sysno::timerfd_gettime => Syscall::TimerfdGettime(arg0, arg1),
Sysno::accept4 => Syscall::Accept4(arg0, arg1, arg2, arg3),
Sysno::signalfd4 => Syscall::Signalfd4(arg0, arg1, arg2, arg3),
Sysno::eventfd2 => Syscall::Eventfd2(arg0, arg1),
Sysno::epoll_create1 => Syscall::EpollCreate1(arg0),
Sysno::dup3 => Syscall::Dup3(arg0, arg1, arg2),
Sysno::pipe2 => Syscall::Pipe2(arg0, arg1),
Sysno::inotify_init1 => Syscall::InotifyInit1(arg0),
Sysno::preadv => Syscall::Preadv(arg0, arg1, arg2, arg3),
Sysno::pwritev => Syscall::Pwritev(arg0, arg1, arg2, arg3),
Sysno::rt_tgsigqueueinfo => Syscall::RtTgsigqueueinfo(arg0, arg1, arg2, arg3),
Sysno::perf_event_open => Syscall::PerfEventOpen(arg0, arg1, arg2, arg3, arg4),
Sysno::recvmmsg => Syscall::Recvmmsg(arg0, arg1, arg2, arg3, arg4),
Sysno::fanotify_init => Syscall::FanotifyInit(arg0, arg1),
Sysno::fanotify_mark => Syscall::FanotifyMark(arg0, arg1, arg2, arg3, arg4),
Sysno::prlimit64 => Syscall::Prlimit64(arg0, arg1, arg2, arg3),
Sysno::name_to_handle_at => Syscall::NameToHandleAt(arg0, arg1, arg2, arg3, arg4),
Sysno::open_by_handle_at => Syscall::OpenByHandleAt(arg0, arg1, arg2),
Sysno::clock_adjtime => Syscall::ClockAdjtime(arg0, arg1),
Sysno::syncfs => Syscall::Syncfs(arg0),
Sysno::sendmmsg => Syscall::Sendmmsg(arg0, arg1, arg2, arg3),
Sysno::setns => Syscall::Setns(arg0, arg1),
Sysno::getcpu => Syscall::Getcpu(arg0, arg1, arg2),
Sysno::process_vm_readv => Syscall::ProcessVmReadv(arg0, arg1, arg2, arg3, arg4, arg5),
Sysno::process_vm_writev => Syscall::ProcessVmWritev(arg0, arg1, arg2, arg3, arg4, arg5),
Sysno::kcmp => Syscall::Kcmp(arg0, arg1, arg2, arg3, arg4),
Sysno::finit_module => Syscall::FinitModule(arg0, arg1, arg2),
Sysno::sched_setattr => Syscall::SchedSetattr(arg0, arg1, arg2),
Sysno::sched_getattr => Syscall::SchedGetattr(arg0, arg1, arg2, arg3),
Sysno::renameat2 => Syscall::Renameat2(arg0, arg1, arg2, arg3, arg4),
Sysno::seccomp => Syscall::Seccomp(arg0, arg1, arg2),
Sysno::getrandom => Syscall::Getrandom(arg0, arg1, arg2),
Sysno::memfd_create => Syscall::MemfdCreate(arg0, arg1),
Sysno::kexec_file_load => Syscall::KexecFileLoad(arg0, arg1, arg2, arg3, arg4),
Sysno::bpf => Syscall::Bpf(arg0, arg1, arg2),
Sysno::execveat => Syscall::Execveat(arg0, arg1, arg2, arg3, arg4),
Sysno::userfaultfd => Syscall::Userfaultfd(arg0),
Sysno::membarrier => Syscall::Membarrier(arg0, arg1),
Sysno::mlock2 => Syscall::Mlock2(arg0, arg1, arg2),
Sysno::copy_file_range => Syscall::CopyFileRange(arg0, arg1, arg2, arg3, arg4, arg5),
Sysno::preadv2 => Syscall::Preadv2(arg0, arg1, arg2, arg3, arg4),
Sysno::pwritev2 => Syscall::Pwritev2(arg0, arg1, arg2, arg3, arg4),
Sysno::pkey_mprotect => Syscall::PkeyMprotect(arg0, arg1, arg2, arg3),
Sysno::pkey_alloc => Syscall::PkeyAlloc(arg0, arg1),
Sysno::pkey_free => Syscall::PkeyFree(arg0),
Sysno::statx => Syscall::Statx(arg0, arg1, arg2, arg3, arg4),
Sysno::io_pgetevents => Syscall::IoPgetevents(arg0, arg1, arg2, arg3, arg4, arg5),
Sysno::rseq => Syscall::Rseq(arg0, arg1, arg2, arg3),
Sysno::pidfd_send_signal => Syscall::PidfdSendSignal(arg0, arg1, arg2, arg3),
Sysno::io_uring_setup => Syscall::IoUringSetup(arg0, arg1),
Sysno::io_uring_enter => Syscall::IoUringEnter(arg0, arg1, arg2, arg3, arg4),
Sysno::io_uring_register => Syscall::IoUringRegister(arg0, arg1, arg2, arg3),
Sysno::open_tree => Syscall::OpenTree(arg0, arg1, arg2),
Sysno::move_mount => Syscall::MoveMount(arg0, arg1, arg2, arg3, arg4),
Sysno::fsopen => Syscall::Fsopen(arg0, arg1, arg2),
Sysno::fsconfig => Syscall::Fsconfig(arg0, arg1, arg2, arg3, arg4),
Sysno::fsmount => Syscall::Fsmount(arg0, arg1, arg2),
Sysno::fspick => Syscall::Fspick(arg0, arg1, arg2),
Sysno::pidfd_open => Syscall::PidfdOpen(arg0, arg1),
Sysno::clone3 => Syscall::Clone3(arg0, arg1),
Sysno::close_range => Syscall::CloseRange(arg0, arg1, arg2),
Sysno::openat2 => Syscall::Openat2(arg0, arg1, arg2, arg3),
Sysno::pidfd_getfd => Syscall::PidfdGetfd(arg0, arg1, arg2),
Sysno::faccessat2 => Syscall::Faccessat2(arg0, arg1, arg2, arg3),
Sysno::process_madvise => Syscall::ProcessMadvise(arg0, arg1, arg2, arg3, arg4),
Sysno::epoll_pwait2 => Syscall::EpollPwait2(arg0, arg1, arg2, arg3, arg4),
Sysno::mount_setattr => Syscall::MountSetattr(arg0, arg1, arg2, arg3),
Sysno::quotactl_fd => Syscall::QuotactlFd(arg0, arg1, arg2, arg3),
Sysno::landlock_create_ruleset => Syscall::LandlockCreateRuleset(arg0, arg1, arg2),
Sysno::landlock_add_rule => Syscall::LandlockAddRule(arg0, arg1, arg2, arg3),
Sysno::landlock_restrict_self => Syscall::LandlockRestrictSelf(arg0, arg1),
Sysno::memfd_secret => Syscall::MemfdSecret(arg0),
Sysno::process_mrelease => Syscall::ProcessMrelease(arg0, arg1),
Sysno::futex_waitv => Syscall::FutexWaitv(arg0, arg1, arg2),
Sysno::set_mempolicy_home_node => Syscall::SetMempolicyHomeNode(arg0, arg1, arg2),
Sysno::cachestat => Syscall::Cachestat(arg0, arg1, arg2, arg3, arg4),
Sysno::fchmodat2 => Syscall::Fchmodat2(arg0, arg1, arg2, arg3),
Sysno::map_shadow_stack => Syscall::MapShadowStack(arg0, arg1),
Sysno::futex_wake => Syscall::FutexWake(arg0, arg1, arg2),
Sysno::futex_wait => Syscall::FutexWait(arg0, arg1, arg2),
Sysno::futex_requeue => Syscall::FutexRequeue(arg0, arg1, arg2, arg3),
Sysno::statmount => Syscall::Statmount(arg0, arg1, arg2),
Sysno::listmount => Syscall::Listmount(arg0, arg1, arg2),
Sysno::lsm_get_self_attr => Syscall::LsmGetSelfAttr(arg0, arg1, arg2, arg3),
Sysno::lsm_set_self_attr => Syscall::LsmSetSelfAttr(arg0, arg1, arg2),
Sysno::lsm_list_modules => Syscall::LsmListModules(arg0, arg1),
// _ => Syscall::Unknown(syscall_num, args),
}
}
+41
View File
@@ -0,0 +1,41 @@
mod create_syscall;
mod proxy_list;
mod syscall;
mod syscall_num;
const CONFIG: bincode::config::Configuration = bincode::config::standard();
use std::{
collections::HashMap,
sync::{Arc, Mutex},
};
use bincode::{Decode, Encode};
pub use create_syscall::create_syscall;
pub use proxy_list::syscall_should_proxy;
pub use syscall::Syscall;
pub use syscall_num::Sysno;
#[derive(Debug, PartialEq, Eq, Encode, Decode)]
pub enum Message {
RequestMemory(isize), // Request a memory object at a specific address
UpdateMemory(isize, Vec<u8>), // Update a memory object
Syscall(isize, [isize; 6]), // Execute a syscall with arguments
SyscallReturn(isize, Option<(isize, Vec<u8>)>), // Syscall return value and optional new memory
}
pub type ProgramMemory = Arc<Mutex<HashMap<isize, Vec<u8>>>>;
impl Message {
pub fn encode(&self) -> Vec<u8> {
bincode::encode_to_vec(self, CONFIG).unwrap()
}
pub fn decode(bytes: &[u8]) -> Option<Self> {
if let Ok((decoded, _)) = bincode::decode_from_slice(&bytes[..], CONFIG) {
Some(decoded)
} else {
None
}
}
}
+540
View File
@@ -0,0 +1,540 @@
use crate::{Syscall, syscall_num::Sysno};
pub fn syscall_should_proxy(syscall: &Syscall) -> bool {
match syscall {
// --- Filesystem & I/O Syscalls ---
// These interact with the filesystem and need to be forwarded to the remote host.
Syscall::Read(..)
| Syscall::Write(..)
| Syscall::Open(..)
| Syscall::Close(..)
| Syscall::Stat(..)
| Syscall::Fstat(..)
| Syscall::Lstat(..)
| Syscall::Openat(..)
| Syscall::Creat(..)
| Syscall::Rename(..)
| Syscall::Renameat(..)
| Syscall::Unlink(..)
| Syscall::Unlinkat(..)
| Syscall::Mkdir(..)
| Syscall::Mkdirat(..)
| Syscall::Rmdir(..)
| Syscall::Chdir(..)
| Syscall::Fchdir(..)
| Syscall::Chmod(..)
| Syscall::Fchmod(..)
| Syscall::Fchmodat(..)
| Syscall::Chown(..)
| Syscall::Fchown(..)
| Syscall::Lchown(..)
| Syscall::Fchownat(..)
| Syscall::Access(..)
| Syscall::Faccessat(..)
| Syscall::Getdents(..)
| Syscall::Getdents64(..)
| Syscall::Readlink(..)
| Syscall::Readlinkat(..)
| Syscall::Symlink(..)
| Syscall::Symlinkat(..)
| Syscall::Truncate(..)
| Syscall::Ftruncate(..)
| Syscall::Getcwd(..)
| Syscall::Lseek(..)
| Syscall::Sendfile(..)
| Syscall::Sync
| Syscall::Fsync(..)
| Syscall::Fdatasync(..)
| Syscall::Fcntl(..)
| Syscall::Flock(..)
| Syscall::Pipe(..)
| Syscall::Pipe2(..)
| Syscall::Dup(..)
| Syscall::Dup2(..)
| Syscall::Dup3(..)
| Syscall::InotifyInit
| Syscall::InotifyInit1(..)
| Syscall::InotifyAddWatch(..)
| Syscall::InotifyRmWatch(..)
| Syscall::EpollCreate(..)
| Syscall::EpollCreate1(..)
| Syscall::EpollCtl(..)
| Syscall::EpollWait(..)
| Syscall::EpollPwait(..)
| Syscall::EpollPwait2(..)
| Syscall::Splice(..)
| Syscall::Tee(..)
| Syscall::Vmsplice(..)
| Syscall::Fallocate(..)
| Syscall::CopyFileRange(..)
| Syscall::Utimes(..)
| Syscall::Futimesat(..)
| Syscall::Getxattr(..)
| Syscall::Lgetxattr(..)
| Syscall::Fgetxattr(..)
| Syscall::Listxattr(..)
| Syscall::Llistxattr(..)
| Syscall::Flistxattr(..)
| Syscall::Setxattr(..)
| Syscall::Lsetxattr(..)
| Syscall::Fsetxattr(..)
| Syscall::Removexattr(..)
| Syscall::Lremovexattr(..)
| Syscall::Fremovexattr(..)
| Syscall::Readv(..)
| Syscall::Writev(..)
| Syscall::Pread64(..)
| Syscall::Pwrite64(..)
| Syscall::Preadv(..)
| Syscall::Pwritev(..)
| Syscall::Preadv2(..)
| Syscall::Pwritev2(..)
| Syscall::Syncfs(..)
| Syscall::Readahead(..)
| Syscall::Statx(..) => true,
// --- Network Syscalls ---
// These are inherently remote operations.
Syscall::Socket(..)
| Syscall::Connect(..)
| Syscall::Accept(..)
| Syscall::Accept4(..)
| Syscall::Sendto(..)
| Syscall::Recvfrom(..)
| Syscall::Sendmsg(..)
| Syscall::Recvmsg(..)
| Syscall::Sendmmsg(..)
| Syscall::Recvmmsg(..)
| Syscall::Shutdown(..)
| Syscall::Bind(..)
| Syscall::Listen(..)
| Syscall::Getsockname(..)
| Syscall::Getpeername(..)
| Syscall::Socketpair(..)
| Syscall::Setsockopt(..)
| Syscall::Getsockopt(..) => true,
// --- Process & IPC Syscalls ---
// Syscalls that create new processes or threads (fork, clone, execve)
// or manipulate inter-process state should be forwarded.
Syscall::Clone(..)
| Syscall::Clone3(..)
| Syscall::Fork
| Syscall::Vfork
| Syscall::Execve(..)
| Syscall::Execveat(..)
| Syscall::ExitGroup(..)
| Syscall::Wait4(..)
| Syscall::Waitid(..)
| Syscall::Kill(..)
| Syscall::Tgkill(..)
| Syscall::Tkill(..)
| Syscall::Semget(..)
| Syscall::Semop(..)
| Syscall::Semctl(..)
| Syscall::Semtimedop(..)
| Syscall::Shmget(..)
| Syscall::Shmat(..)
| Syscall::Shmctl(..)
| Syscall::Shmdt(..)
| Syscall::Msgget(..)
| Syscall::Msgsnd(..)
| Syscall::Msgrcv(..)
| Syscall::Msgctl(..) => true,
// --- Other Syscalls that should be forwarded ---
// A few other miscellaneous syscalls that are typically forwarded.
Syscall::Reboot(..)
| Syscall::Adjtimex(..)
| Syscall::Gettimeofday(..)
| Syscall::Settimeofday(..)
| Syscall::ClockGettime(..)
| Syscall::ClockSettime(..)
| Syscall::ClockAdjtime(..)
| Syscall::TimerCreate(..)
| Syscall::TimerSettime(..)
| Syscall::TimerfdCreate(..)
| Syscall::TimerfdSettime(..) => true,
// --- All other syscalls should NOT be forwarded ---
// This includes memory management, local process state queries,
// and other local operations.
_ => false,
}
// match unsafe { std::mem::transmute::<i32, Sysno>(n as i32) } {
// Sysno::read => false,
// Sysno::write => false,
// Sysno::open => false,
// Sysno::close => false,
// Sysno::stat => false,
// Sysno::fstat => false,
// Sysno::lstat => false,
// Sysno::poll => false,
// Sysno::lseek => false,
// Sysno::mmap => false,
// Sysno::mprotect => false,
// Sysno::munmap => false,
// Sysno::brk => false,
// Sysno::rt_sigaction => false,
// Sysno::rt_sigprocmask => false,
// Sysno::rt_sigreturn => false,
// Sysno::ioctl => false,
// Sysno::pread64 => false,
// Sysno::pwrite64 => false,
// Sysno::readv => false,
// Sysno::writev => false,
// Sysno::access => false,
// Sysno::pipe => false,
// Sysno::select => false,
// Sysno::sched_yield => false,
// Sysno::mremap => false,
// Sysno::msync => false,
// Sysno::mincore => false,
// Sysno::madvise => false,
// Sysno::shmget => false,
// Sysno::shmat => false,
// Sysno::shmctl => false,
// Sysno::dup => false,
// Sysno::dup2 => false,
// Sysno::pause => false,
// Sysno::nanosleep => false,
// Sysno::getitimer => false,
// Sysno::alarm => false,
// Sysno::setitimer => false,
// Sysno::getpid => false,
// Sysno::sendfile => false,
// Sysno::socket => false,
// Sysno::connect => false,
// Sysno::accept => false,
// Sysno::sendto => false,
// Sysno::recvfrom => false,
// Sysno::sendmsg => false,
// Sysno::recvmsg => false,
// Sysno::shutdown => false,
// Sysno::bind => false,
// Sysno::listen => false,
// Sysno::getsockname => false,
// Sysno::getpeername => false,
// Sysno::socketpair => false,
// Sysno::setsockopt => false,
// Sysno::getsockopt => false,
// Sysno::clone => false,
// Sysno::fork => false,
// Sysno::vfork => false,
// Sysno::execve => false,
// Sysno::exit => false,
// Sysno::wait4 => false,
// Sysno::kill => false,
// Sysno::uname => false,
// Sysno::semget => false,
// Sysno::semop => false,
// Sysno::semctl => false,
// Sysno::shmdt => false,
// Sysno::msgget => false,
// Sysno::msgsnd => false,
// Sysno::msgrcv => false,
// Sysno::msgctl => false,
// Sysno::fcntl => false,
// Sysno::flock => false,
// Sysno::fsync => false,
// Sysno::fdatasync => false,
// Sysno::truncate => false,
// Sysno::ftruncate => false,
// Sysno::getdents => false,
// Sysno::getcwd => false,
// Sysno::chdir => false,
// Sysno::fchdir => false,
// Sysno::rename => false,
// Sysno::mkdir => false,
// Sysno::rmdir => false,
// Sysno::creat => false,
// Sysno::link => false,
// Sysno::unlink => false,
// Sysno::symlink => false,
// Sysno::readlink => false,
// Sysno::chmod => false,
// Sysno::fchmod => false,
// Sysno::chown => false,
// Sysno::fchown => false,
// Sysno::lchown => false,
// Sysno::umask => false,
// Sysno::gettimeofday => false,
// Sysno::getrlimit => false,
// Sysno::getrusage => false,
// Sysno::sysinfo => false,
// Sysno::times => false,
// Sysno::ptrace => false,
// Sysno::getuid => false,
// Sysno::syslog => false,
// Sysno::getgid => false,
// Sysno::setuid => false,
// Sysno::setgid => false,
// Sysno::geteuid => false,
// Sysno::getegid => false,
// Sysno::setpgid => false,
// Sysno::getppid => false,
// Sysno::getpgrp => false,
// Sysno::setsid => false,
// Sysno::setreuid => false,
// Sysno::setregid => false,
// Sysno::getgroups => false,
// Sysno::setgroups => false,
// Sysno::setresuid => false,
// Sysno::getresuid => false,
// Sysno::setresgid => false,
// Sysno::getresgid => false,
// Sysno::getpgid => false,
// Sysno::setfsuid => false,
// Sysno::setfsgid => false,
// Sysno::getsid => false,
// Sysno::capget => false,
// Sysno::capset => false,
// Sysno::rt_sigpending => false,
// Sysno::rt_sigtimedwait => false,
// Sysno::rt_sigqueueinfo => false,
// Sysno::rt_sigsuspend => false,
// Sysno::sigaltstack => false,
// Sysno::utime => false,
// Sysno::mknod => false,
// Sysno::uselib => false,
// Sysno::personality => false,
// Sysno::ustat => false,
// Sysno::statfs => false,
// Sysno::fstatfs => false,
// Sysno::sysfs => false,
// Sysno::getpriority => false,
// Sysno::setpriority => false,
// Sysno::sched_setparam => false,
// Sysno::sched_getparam => false,
// Sysno::sched_setscheduler => false,
// Sysno::sched_getscheduler => false,
// Sysno::sched_get_priority_max => false,
// Sysno::sched_get_priority_min => false,
// Sysno::sched_rr_get_interval => false,
// Sysno::mlock => false,
// Sysno::munlock => false,
// Sysno::mlockall => false,
// Sysno::munlockall => false,
// Sysno::vhangup => false,
// Sysno::modify_ldt => false,
// Sysno::pivot_root => false,
// Sysno::_sysctl => false,
// Sysno::prctl => false,
// Sysno::arch_prctl => false,
// Sysno::adjtimex => false,
// Sysno::setrlimit => false,
// Sysno::chroot => false,
// Sysno::sync => false,
// Sysno::acct => false,
// Sysno::settimeofday => false,
// Sysno::mount => false,
// Sysno::umount2 => false,
// Sysno::swapon => false,
// Sysno::swapoff => false,
// Sysno::reboot => false,
// Sysno::sethostname => false,
// Sysno::setdomainname => false,
// Sysno::iopl => false,
// Sysno::ioperm => false,
// Sysno::create_module => false,
// Sysno::init_module => false,
// Sysno::delete_module => false,
// Sysno::get_kernel_syms => false,
// Sysno::query_module => false,
// Sysno::quotactl => false,
// Sysno::nfsservctl => false,
// Sysno::getpmsg => false,
// Sysno::putpmsg => false,
// Sysno::afs_syscall => false,
// Sysno::tuxcall => false,
// Sysno::security => false,
// Sysno::gettid => false,
// Sysno::readahead => false,
// Sysno::setxattr => false,
// Sysno::lsetxattr => false,
// Sysno::fsetxattr => false,
// Sysno::getxattr => false,
// Sysno::lgetxattr => false,
// Sysno::fgetxattr => false,
// Sysno::listxattr => false,
// Sysno::llistxattr => false,
// Sysno::flistxattr => false,
// Sysno::removexattr => false,
// Sysno::lremovexattr => false,
// Sysno::fremovexattr => false,
// Sysno::tkill => false,
// Sysno::time => false,
// Sysno::futex => false,
// Sysno::sched_setaffinity => false,
// Sysno::sched_getaffinity => false,
// Sysno::set_thread_area => false,
// Sysno::io_setup => false,
// Sysno::io_destroy => false,
// Sysno::io_getevents => false,
// Sysno::io_submit => false,
// Sysno::io_cancel => false,
// Sysno::get_thread_area => false,
// Sysno::lookup_dcookie => false,
// Sysno::epoll_create => false,
// Sysno::epoll_ctl_old => false,
// Sysno::epoll_wait_old => false,
// Sysno::remap_file_pages => false,
// Sysno::getdents64 => false,
// Sysno::set_tid_address => false,
// Sysno::restart_syscall => false,
// Sysno::semtimedop => false,
// Sysno::fadvise64 => false,
// Sysno::timer_create => false,
// Sysno::timer_settime => false,
// Sysno::timer_gettime => false,
// Sysno::timer_getoverrun => false,
// Sysno::timer_delete => false,
// Sysno::clock_settime => false,
// Sysno::clock_gettime => false,
// Sysno::clock_getres => false,
// Sysno::clock_nanosleep => false,
// Sysno::exit_group => true,
// Sysno::epoll_wait => false,
// Sysno::epoll_ctl => false,
// Sysno::tgkill => false,
// Sysno::utimes => false,
// Sysno::vserver => false,
// Sysno::mbind => false,
// Sysno::set_mempolicy => false,
// Sysno::get_mempolicy => false,
// Sysno::mq_open => false,
// Sysno::mq_unlink => false,
// Sysno::mq_timedsend => false,
// Sysno::mq_timedreceive => false,
// Sysno::mq_notify => false,
// Sysno::mq_getsetattr => false,
// Sysno::kexec_load => false,
// Sysno::waitid => false,
// Sysno::add_key => false,
// Sysno::request_key => false,
// Sysno::keyctl => false,
// Sysno::ioprio_set => false,
// Sysno::ioprio_get => false,
// Sysno::inotify_init => false,
// Sysno::inotify_add_watch => false,
// Sysno::inotify_rm_watch => false,
// Sysno::migrate_pages => false,
// Sysno::openat => false,
// Sysno::mkdirat => false,
// Sysno::mknodat => false,
// Sysno::fchownat => false,
// Sysno::futimesat => false,
// Sysno::newfstatat => false,
// Sysno::unlinkat => false,
// Sysno::renameat => false,
// Sysno::linkat => false,
// Sysno::symlinkat => false,
// Sysno::readlinkat => false,
// Sysno::fchmodat => false,
// Sysno::faccessat => false,
// Sysno::pselect6 => false,
// Sysno::ppoll => false,
// Sysno::unshare => false,
// Sysno::set_robust_list => false,
// Sysno::get_robust_list => false,
// Sysno::splice => false,
// Sysno::tee => false,
// Sysno::sync_file_range => false,
// Sysno::vmsplice => false,
// Sysno::move_pages => false,
// Sysno::utimensat => false,
// Sysno::epoll_pwait => false,
// Sysno::signalfd => false,
// Sysno::timerfd_create => false,
// Sysno::eventfd => false,
// Sysno::fallocate => false,
// Sysno::timerfd_settime => false,
// Sysno::timerfd_gettime => false,
// Sysno::accept4 => false,
// Sysno::signalfd4 => false,
// Sysno::eventfd2 => false,
// Sysno::epoll_create1 => false,
// Sysno::dup3 => false,
// Sysno::pipe2 => false,
// Sysno::inotify_init1 => false,
// Sysno::preadv => false,
// Sysno::pwritev => false,
// Sysno::rt_tgsigqueueinfo => false,
// Sysno::perf_event_open => false,
// Sysno::recvmmsg => false,
// Sysno::fanotify_init => false,
// Sysno::fanotify_mark => false,
// Sysno::prlimit64 => false,
// Sysno::name_to_handle_at => false,
// Sysno::open_by_handle_at => false,
// Sysno::clock_adjtime => false,
// Sysno::syncfs => false,
// Sysno::sendmmsg => false,
// Sysno::setns => false,
// Sysno::getcpu => false,
// Sysno::process_vm_readv => false,
// Sysno::process_vm_writev => false,
// Sysno::kcmp => false,
// Sysno::finit_module => false,
// Sysno::sched_setattr => false,
// Sysno::sched_getattr => false,
// Sysno::renameat2 => false,
// Sysno::seccomp => false,
// Sysno::getrandom => false,
// Sysno::memfd_create => false,
// Sysno::kexec_file_load => false,
// Sysno::bpf => false,
// Sysno::execveat => false,
// Sysno::userfaultfd => false,
// Sysno::membarrier => false,
// Sysno::mlock2 => false,
// Sysno::copy_file_range => false,
// Sysno::preadv2 => false,
// Sysno::pwritev2 => false,
// Sysno::pkey_mprotect => false,
// Sysno::pkey_alloc => false,
// Sysno::pkey_free => false,
// Sysno::statx => false,
// Sysno::io_pgetevents => false,
// Sysno::rseq => false,
// Sysno::pidfd_send_signal => false,
// Sysno::io_uring_setup => false,
// Sysno::io_uring_enter => false,
// Sysno::io_uring_register => false,
// Sysno::open_tree => false,
// Sysno::move_mount => false,
// Sysno::fsopen => false,
// Sysno::fsconfig => false,
// Sysno::fsmount => false,
// Sysno::fspick => false,
// Sysno::pidfd_open => false,
// Sysno::clone3 => false,
// Sysno::close_range => false,
// Sysno::openat2 => false,
// Sysno::pidfd_getfd => false,
// Sysno::faccessat2 => false,
// Sysno::process_madvise => false,
// Sysno::epoll_pwait2 => false,
// Sysno::mount_setattr => false,
// Sysno::quotactl_fd => false,
// Sysno::landlock_create_ruleset => false,
// Sysno::landlock_add_rule => false,
// Sysno::landlock_restrict_self => false,
// Sysno::memfd_secret => false,
// Sysno::process_mrelease => false,
// Sysno::futex_waitv => false,
// Sysno::set_mempolicy_home_node => false,
// Sysno::cachestat => false,
// Sysno::fchmodat2 => false,
// Sysno::map_shadow_stack => false,
// Sysno::futex_wake => false,
// Sysno::futex_wait => false,
// Sysno::futex_requeue => false,
// Sysno::statmount => false,
// Sysno::listmount => false,
// Sysno::lsm_get_self_attr => false,
// Sysno::lsm_set_self_attr => false,
// Sysno::lsm_list_modules => false,
// }
}
+404
View File
@@ -0,0 +1,404 @@
use bincode::{Decode, Encode};
/// file descriptor
type Fd = usize;
/// Memory buffer pointer
type Ptr = usize;
/// Length
type Len = usize;
/// The `Syscall` enum represents a system call with its arguments.
///
/// Each variant corresponds to a specific system call and holds the
/// arguments as a tuple of `usize` values.
#[derive(Debug, PartialEq, Eq, Encode, Decode)]
pub enum Syscall {
Read(Fd, Ptr, Len),
Write(Fd, Ptr, Len),
Open(Ptr, usize, usize),
Close(Fd),
Stat(Ptr, Ptr),
Fstat(Fd, Ptr),
Lstat(Ptr, Ptr),
Poll(Ptr, usize, usize),
Lseek(Fd, usize, usize),
Mmap(Ptr, Len, usize, usize, Fd, usize),
Mprotect(Ptr, Len, usize),
Munmap(Ptr, Len),
Brk(Ptr),
RtSigaction(usize, Ptr, Ptr, usize),
RtSigprocmask(usize, Ptr, Ptr, usize),
RtSigreturn,
Ioctl(Fd, usize, Ptr),
Pread64(Fd, Ptr, Len, usize),
Pwrite64(Fd, Ptr, Len, usize),
Readv(Fd, Ptr, usize),
Writev(Fd, Ptr, usize),
Access(Ptr, usize),
Pipe(Ptr),
Select(usize, Ptr, Ptr, Ptr, Ptr),
SchedYield,
Mremap(Ptr, Len, Len, usize, Ptr),
Msync(Ptr, Len, usize),
Mincore(Ptr, Len, Ptr),
Madvise(Ptr, Len, usize),
Shmget(usize, Len, usize),
Shmat(usize, Ptr, usize),
Shmctl(usize, usize, Ptr),
Dup(Fd),
Dup2(Fd, Fd),
Pause,
Nanosleep(Ptr, Ptr),
Getitimer(usize, Ptr),
Alarm(usize),
Setitimer(usize, Ptr, Ptr),
Getpid,
Sendfile(Fd, Fd, Ptr, Len),
Socket(usize, usize, usize),
Connect(Fd, Ptr, usize),
Accept(Fd, Ptr, Ptr),
Sendto(Fd, Ptr, Len, usize, Ptr, usize),
Recvfrom(Fd, Ptr, Len, usize, Ptr, Ptr),
Sendmsg(Fd, Ptr, usize),
Recvmsg(Fd, Ptr, usize),
Shutdown(Fd, usize),
Bind(Fd, Ptr, usize),
Listen(Fd, usize),
Getsockname(Fd, Ptr, Ptr),
Getpeername(Fd, Ptr, Ptr),
Socketpair(usize, usize, usize, Ptr),
Setsockopt(Fd, usize, usize, Ptr, usize),
Getsockopt(Fd, usize, usize, Ptr, Ptr),
Clone(usize, Ptr, Ptr, Ptr, Ptr),
Fork,
Vfork,
Execve(Ptr, Ptr, Ptr),
Exit(usize),
Wait4(usize, Ptr, usize, Ptr),
Kill(usize, usize),
Uname(Ptr),
Semget(usize, usize, usize),
Semop(usize, Ptr, usize),
Semctl(usize, usize, usize, usize),
Shmdt(Ptr),
Msgget(usize, usize),
Msgsnd(usize, Ptr, Len, usize),
Msgrcv(usize, Ptr, Len, usize, usize),
Msgctl(usize, usize, Ptr),
Fcntl(Fd, usize, usize),
Flock(Fd, usize),
Fsync(Fd),
Fdatasync(Fd),
Truncate(Ptr, Len),
Ftruncate(Fd, Len),
Getdents(Fd, Ptr, Len),
Getcwd(Ptr, Len),
Chdir(Ptr),
Fchdir(Fd),
Rename(Ptr, Ptr),
Mkdir(Ptr, usize),
Rmdir(Ptr),
Creat(Ptr, usize),
Link(Ptr, Ptr),
Unlink(Ptr),
Symlink(Ptr, Ptr),
Readlink(Ptr, Ptr, Len),
Chmod(Ptr, usize),
Fchmod(Fd, usize),
Chown(Ptr, usize, usize),
Fchown(Fd, usize, usize),
Lchown(Ptr, usize, usize),
Umask(usize),
Gettimeofday(Ptr, Ptr),
Getrlimit(usize, Ptr),
Getrusage(usize, Ptr),
Sysinfo(Ptr),
Times(Ptr),
Ptrace(usize, usize, Ptr, Ptr),
Getuid,
Syslog(usize, Ptr, Len),
Getgid,
Setuid(usize),
Setgid(usize),
Geteuid,
Getegid,
Setpgid(usize, usize),
Getppid,
Getpgrp,
Setsid,
Setreuid(usize, usize),
Setregid(usize, usize),
Getgroups(usize, Ptr),
Setgroups(usize, Ptr),
Setresuid(usize, usize, usize),
Getresuid(Ptr, Ptr, Ptr),
Setresgid(usize, usize, usize),
Getresgid(Ptr, Ptr, Ptr),
Getpgid(usize),
Setfsuid(usize),
Setfsgid(usize),
Getsid(usize),
Capget(usize, usize),
Capset(usize, usize),
RtSigpending(Ptr, usize),
RtSigtimedwait(Ptr, Ptr, Ptr, usize),
RtSigqueueinfo(usize, usize, Ptr),
RtSigsuspend(Ptr, usize),
Sigaltstack(Ptr, Ptr),
Utime(Ptr, Ptr),
Mknod(Ptr, usize, usize),
Uselib(Ptr),
Personality(usize),
Ustat(usize, Ptr),
Statfs(Ptr, Ptr),
Fstatfs(Fd, Ptr),
Sysfs(usize, usize, usize),
Getpriority(usize, usize),
Setpriority(usize, usize, usize),
SchedSetparam(usize, Ptr),
SchedGetparam(usize, Ptr),
SchedSetscheduler(usize, usize, Ptr),
SchedGetscheduler(usize),
SchedGetPriorityMax(usize),
SchedGetPriorityMin(usize),
SchedRrGetInterval(usize, Ptr),
Mlock(Ptr, Len),
Munlock(Ptr, Len),
Mlockall(usize),
Munlockall,
Vhangup,
ModifyLdt(usize, Ptr, usize),
PivotRoot(Ptr, Ptr),
_Sysctl(Ptr),
Prctl(usize, usize, usize, usize, usize),
ArchPrctl(usize, Ptr),
Adjtimex(Ptr),
Setrlimit(usize, Ptr),
Chroot(Ptr),
Sync,
Acct(Ptr),
Settimeofday(Ptr, Ptr),
Mount(Ptr, Ptr, Ptr, usize, Ptr),
Umount2(Ptr, usize),
Swapon(Ptr, usize),
Swapoff(Ptr),
Reboot(usize, usize, usize, Ptr),
Sethostname(Ptr, Len),
Setdomainname(Ptr, Len),
Iopl(usize),
Ioperm(usize, usize, usize),
CreateModule(Ptr, Len),
InitModule(Ptr, Len, Ptr),
DeleteModule(Ptr, usize),
GetKernelSyms(Ptr),
QueryModule(Ptr, usize, Ptr, usize, Ptr),
Quotactl(usize, Ptr, usize, Ptr),
Nfsservctl(usize, Ptr, Ptr),
Getpmsg,
Putpmsg,
AfsSyscall,
Tuxcall,
Security,
Gettid,
Readahead(Fd, usize, Len),
Setxattr(Ptr, Ptr, Ptr, Len, usize),
Lsetxattr(Ptr, Ptr, Ptr, Len, usize),
Fsetxattr(Fd, Ptr, Ptr, Len, usize),
Getxattr(Ptr, Ptr, Ptr, Len),
Lgetxattr(Ptr, Ptr, Ptr, Len),
Fgetxattr(Fd, Ptr, Ptr, Len),
Listxattr(Ptr, Ptr, Len),
Llistxattr(Ptr, Ptr, Len),
Flistxattr(Fd, Ptr, Len),
Removexattr(Ptr, Ptr),
Lremovexattr(Ptr, Ptr),
Fremovexattr(Fd, Ptr),
Tkill(usize, usize),
Time(Ptr),
Futex(Ptr, usize, usize, Ptr, Ptr, usize),
SchedSetaffinity(usize, usize, Ptr),
SchedGetaffinity(usize, usize, Ptr),
SetThreadArea(Ptr),
IoSetup(usize, Ptr),
IoDestroy(usize),
IoGetevents(usize, usize, usize, Ptr, Ptr),
IoSubmit(usize, usize, Ptr),
IoCancel(usize, Ptr, Ptr),
GetThreadArea(Ptr),
LookupDcookie(usize, Ptr, usize, usize),
EpollCreate(usize),
EpollCtlOld,
EpollWaitOld,
RemapFilePages(Ptr, Len, usize, usize, usize),
Getdents64(Fd, Ptr, Len),
SetTidAddress(Ptr),
RestartSyscall,
Semtimedop(usize, Ptr, usize, Ptr),
Fadvise64(Fd, usize, Len, usize),
TimerCreate(usize, Ptr, Ptr),
TimerSettime(usize, usize, Ptr, Ptr),
TimerGettime(usize, Ptr),
TimerGetoverrun(usize),
TimerDelete(usize),
ClockSettime(usize, Ptr),
ClockGettime(usize, Ptr),
ClockGetres(usize, Ptr),
ClockNanosleep(usize, usize, Ptr, Ptr),
ExitGroup(usize),
EpollWait(Fd, Ptr, usize, usize),
EpollCtl(Fd, usize, Fd, Ptr),
Tgkill(usize, usize, usize),
Utimes(Ptr, Ptr),
Vserver,
Mbind(Ptr, usize, usize, Ptr, usize, usize),
SetMempolicy(usize, Ptr, usize),
GetMempolicy(Ptr, Ptr, usize, Ptr, usize),
MqOpen(Ptr, usize, usize, Ptr),
MqUnlink(Ptr),
MqTimedsend(usize, Ptr, Len, usize, Ptr),
MqTimedreceive(usize, Ptr, Len, usize, Ptr),
MqNotify(usize, Ptr),
MqGetsetattr(usize, Ptr, Ptr),
KexecLoad(usize, usize, Ptr, usize),
Waitid(usize, usize, Ptr, usize, Ptr),
AddKey(Ptr, Ptr, Ptr, Len),
RequestKey(Ptr, Ptr, Ptr),
Keyctl(usize, usize, usize, usize, usize),
IoprioSet(usize, usize, usize),
IoprioGet(usize, usize),
InotifyInit,
InotifyAddWatch(Fd, Ptr, usize),
InotifyRmWatch(Fd, usize),
MigratePages(usize, Len, Ptr, Ptr),
Openat(Fd, Ptr, usize, usize),
Mkdirat(Fd, Ptr, usize),
Mknodat(Fd, Ptr, usize, usize),
Fchownat(Fd, Ptr, usize, usize, usize),
Futimesat(Fd, Ptr, Ptr),
Newfstatat(Fd, Ptr, Ptr, usize),
Unlinkat(Fd, Ptr, usize),
Renameat(Fd, Ptr, Fd, Ptr),
Linkat(Fd, Ptr, Fd, Ptr, usize),
Symlinkat(Ptr, Fd, Ptr),
Readlinkat(Fd, Ptr, Ptr, Len),
Fchmodat(Fd, Ptr, usize),
Faccessat(Fd, Ptr, usize),
Pselect6(usize, Ptr, Ptr, Ptr, Ptr, Ptr),
Ppoll(Ptr, usize, Ptr, Ptr, usize),
Unshare(usize),
SetRobustList(Ptr, Len),
GetRobustList(usize, Ptr, Ptr),
Splice(Fd, Ptr, Fd, Ptr, Len, usize),
Tee(Fd, Fd, Len, usize),
SyncFileRange(Fd, usize, usize, usize),
Vmsplice(Fd, Ptr, usize, usize),
MovePages(usize, Len, Ptr, Ptr, Ptr, usize),
Utimensat(Fd, Ptr, Ptr, usize),
EpollPwait(Fd, Ptr, usize, usize, Ptr, usize),
Signalfd(Fd, Ptr, usize),
TimerfdCreate(usize, usize),
Eventfd(usize, usize),
Fallocate(Fd, usize, usize, usize),
TimerfdSettime(Fd, usize, Ptr, Ptr),
TimerfdGettime(Fd, Ptr),
Accept4(Fd, Ptr, Ptr, usize),
Signalfd4(Fd, Ptr, usize, usize),
Eventfd2(usize, usize),
EpollCreate1(usize),
Dup3(Fd, Fd, usize),
Pipe2(Ptr, usize),
InotifyInit1(usize),
Preadv(Fd, Ptr, usize, usize),
Pwritev(Fd, Ptr, usize, usize),
RtTgsigqueueinfo(usize, usize, usize, Ptr),
PerfEventOpen(Ptr, usize, usize, Fd, usize),
Recvmmsg(Fd, Ptr, usize, usize, Ptr),
FanotifyInit(usize, usize),
FanotifyMark(usize, usize, usize, Fd, Ptr),
Prlimit64(usize, usize, Ptr, Ptr),
NameToHandleAt(Fd, Ptr, Ptr, Ptr, usize),
OpenByHandleAt(Fd, Ptr, usize),
ClockAdjtime(usize, Ptr),
Syncfs(Fd),
Sendmmsg(Fd, Ptr, usize, usize),
Setns(Fd, usize),
Getcpu(Ptr, Ptr, Ptr),
ProcessVmReadv(usize, Ptr, usize, Ptr, usize, usize),
ProcessVmWritev(usize, Ptr, usize, Ptr, usize, usize),
Kcmp(usize, usize, usize, usize, usize),
FinitModule(Fd, Ptr, usize),
SchedSetattr(usize, Ptr, usize),
SchedGetattr(usize, Ptr, usize, usize),
Renameat2(Fd, Ptr, Fd, Ptr, usize),
Seccomp(usize, usize, Ptr),
Getrandom(Ptr, Len, usize),
MemfdCreate(Ptr, usize),
KexecFileLoad(Fd, Fd, usize, Ptr, usize),
Bpf(usize, Ptr, usize),
Execveat(Fd, Ptr, Ptr, Ptr, usize),
Userfaultfd(usize),
Membarrier(usize, usize),
Mlock2(Ptr, Len, usize),
CopyFileRange(Fd, Ptr, Fd, Ptr, Len, usize),
Preadv2(Fd, Ptr, usize, usize, usize),
Pwritev2(Fd, Ptr, usize, usize, usize),
PkeyMprotect(Ptr, Len, usize, usize),
PkeyAlloc(usize, usize),
PkeyFree(usize),
Statx(Fd, Ptr, usize, usize, Ptr),
IoPgetevents(usize, usize, usize, Ptr, Ptr, usize),
Rseq(Ptr, Len, usize, usize),
PidfdSendSignal(Fd, usize, Ptr, usize),
IoUringSetup(usize, Ptr),
IoUringEnter(Fd, usize, usize, usize, Ptr),
IoUringRegister(Fd, usize, Ptr, usize),
OpenTree(Fd, Ptr, usize),
MoveMount(Fd, Ptr, Fd, Ptr, usize),
Fsopen(Ptr, usize, usize),
Fsconfig(Fd, usize, Ptr, Ptr, usize),
Fsmount(Fd, usize, usize),
Fspick(Fd, Ptr, usize),
PidfdOpen(usize, usize),
Clone3(Ptr, usize),
CloseRange(Fd, Fd, usize),
Openat2(Fd, Ptr, Ptr, usize),
PidfdGetfd(Fd, Fd, usize),
Faccessat2(Fd, Ptr, usize, usize),
ProcessMadvise(Fd, Ptr, Len, usize, usize),
EpollPwait2(Fd, Ptr, usize, Ptr, usize),
MountSetattr(Fd, Ptr, usize, Ptr),
QuotactlFd(Fd, usize, usize, Ptr),
LandlockCreateRuleset(Ptr, Len, usize),
LandlockAddRule(Fd, usize, Ptr, usize),
LandlockRestrictSelf(Fd, usize),
MemfdSecret(usize),
ProcessMrelease(Fd, usize),
FutexWaitv(Ptr, usize, usize),
SetMempolicyHomeNode(usize, Ptr, usize),
Cachestat(Fd, usize, usize, usize, Ptr),
Fchmodat2(Fd, Ptr, usize, usize),
MapShadowStack(usize, Ptr),
FutexWake(Ptr, usize, usize),
FutexWait(Ptr, usize, usize),
FutexRequeue(Ptr, usize, usize, usize),
Statmount(Fd, Ptr, usize),
Listmount(Ptr, Ptr, usize),
LsmGetSelfAttr(usize, Ptr, Ptr, Len),
LsmSetSelfAttr(usize, Ptr, usize),
LsmListModules(Ptr, usize),
Unknown(usize, [usize; 6]),
}
impl Syscall {
pub fn encode(&self) -> Vec<u8> {
bincode::encode_to_vec(self, crate::CONFIG).unwrap()
}
pub fn decode(bytes: &[u8]) -> Option<Self> {
if let Ok((decoded, _)) = bincode::decode_from_slice(&bytes[..], crate::CONFIG) {
Some(decoded)
} else {
None
}
}
}
+380
View File
@@ -0,0 +1,380 @@
///https://docs.rs/syscalls/latest/syscalls/x86_64/enum.Sysno.html
#[non_exhaustive]
#[repr(i32)]
#[derive(Debug, PartialEq, Eq)]
#[allow(non_camel_case_types)]
pub enum Sysno {
read = 0,
write = 1,
open = 2,
close = 3,
stat = 4,
fstat = 5,
lstat = 6,
poll = 7,
lseek = 8,
mmap = 9,
mprotect = 10,
munmap = 11,
brk = 12,
rt_sigaction = 13,
rt_sigprocmask = 14,
rt_sigreturn = 15,
ioctl = 16,
pread64 = 17,
pwrite64 = 18,
readv = 19,
writev = 20,
access = 21,
pipe = 22,
select = 23,
sched_yield = 24,
mremap = 25,
msync = 26,
mincore = 27,
madvise = 28,
shmget = 29,
shmat = 30,
shmctl = 31,
dup = 32,
dup2 = 33,
pause = 34,
nanosleep = 35,
getitimer = 36,
alarm = 37,
setitimer = 38,
getpid = 39,
sendfile = 40,
socket = 41,
connect = 42,
accept = 43,
sendto = 44,
recvfrom = 45,
sendmsg = 46,
recvmsg = 47,
shutdown = 48,
bind = 49,
listen = 50,
getsockname = 51,
getpeername = 52,
socketpair = 53,
setsockopt = 54,
getsockopt = 55,
clone = 56,
fork = 57,
vfork = 58,
execve = 59,
exit = 60,
wait4 = 61,
kill = 62,
uname = 63,
semget = 64,
semop = 65,
semctl = 66,
shmdt = 67,
msgget = 68,
msgsnd = 69,
msgrcv = 70,
msgctl = 71,
fcntl = 72,
flock = 73,
fsync = 74,
fdatasync = 75,
truncate = 76,
ftruncate = 77,
getdents = 78,
getcwd = 79,
chdir = 80,
fchdir = 81,
rename = 82,
mkdir = 83,
rmdir = 84,
creat = 85,
link = 86,
unlink = 87,
symlink = 88,
readlink = 89,
chmod = 90,
fchmod = 91,
chown = 92,
fchown = 93,
lchown = 94,
umask = 95,
gettimeofday = 96,
getrlimit = 97,
getrusage = 98,
sysinfo = 99,
times = 100,
ptrace = 101,
getuid = 102,
syslog = 103,
getgid = 104,
setuid = 105,
setgid = 106,
geteuid = 107,
getegid = 108,
setpgid = 109,
getppid = 110,
getpgrp = 111,
setsid = 112,
setreuid = 113,
setregid = 114,
getgroups = 115,
setgroups = 116,
setresuid = 117,
getresuid = 118,
setresgid = 119,
getresgid = 120,
getpgid = 121,
setfsuid = 122,
setfsgid = 123,
getsid = 124,
capget = 125,
capset = 126,
rt_sigpending = 127,
rt_sigtimedwait = 128,
rt_sigqueueinfo = 129,
rt_sigsuspend = 130,
sigaltstack = 131,
utime = 132,
mknod = 133,
uselib = 134,
personality = 135,
ustat = 136,
statfs = 137,
fstatfs = 138,
sysfs = 139,
getpriority = 140,
setpriority = 141,
sched_setparam = 142,
sched_getparam = 143,
sched_setscheduler = 144,
sched_getscheduler = 145,
sched_get_priority_max = 146,
sched_get_priority_min = 147,
sched_rr_get_interval = 148,
mlock = 149,
munlock = 150,
mlockall = 151,
munlockall = 152,
vhangup = 153,
modify_ldt = 154,
pivot_root = 155,
_sysctl = 156,
prctl = 157,
arch_prctl = 158,
adjtimex = 159,
setrlimit = 160,
chroot = 161,
sync = 162,
acct = 163,
settimeofday = 164,
mount = 165,
umount2 = 166,
swapon = 167,
swapoff = 168,
reboot = 169,
sethostname = 170,
setdomainname = 171,
iopl = 172,
ioperm = 173,
create_module = 174,
init_module = 175,
delete_module = 176,
get_kernel_syms = 177,
query_module = 178,
quotactl = 179,
nfsservctl = 180,
getpmsg = 181,
putpmsg = 182,
afs_syscall = 183,
tuxcall = 184,
security = 185,
gettid = 186,
readahead = 187,
setxattr = 188,
lsetxattr = 189,
fsetxattr = 190,
getxattr = 191,
lgetxattr = 192,
fgetxattr = 193,
listxattr = 194,
llistxattr = 195,
flistxattr = 196,
removexattr = 197,
lremovexattr = 198,
fremovexattr = 199,
tkill = 200,
time = 201,
futex = 202,
sched_setaffinity = 203,
sched_getaffinity = 204,
set_thread_area = 205,
io_setup = 206,
io_destroy = 207,
io_getevents = 208,
io_submit = 209,
io_cancel = 210,
get_thread_area = 211,
lookup_dcookie = 212,
epoll_create = 213,
epoll_ctl_old = 214,
epoll_wait_old = 215,
remap_file_pages = 216,
getdents64 = 217,
set_tid_address = 218,
restart_syscall = 219,
semtimedop = 220,
fadvise64 = 221,
timer_create = 222,
timer_settime = 223,
timer_gettime = 224,
timer_getoverrun = 225,
timer_delete = 226,
clock_settime = 227,
clock_gettime = 228,
clock_getres = 229,
clock_nanosleep = 230,
exit_group = 231,
epoll_wait = 232,
epoll_ctl = 233,
tgkill = 234,
utimes = 235,
vserver = 236,
mbind = 237,
set_mempolicy = 238,
get_mempolicy = 239,
mq_open = 240,
mq_unlink = 241,
mq_timedsend = 242,
mq_timedreceive = 243,
mq_notify = 244,
mq_getsetattr = 245,
kexec_load = 246,
waitid = 247,
add_key = 248,
request_key = 249,
keyctl = 250,
ioprio_set = 251,
ioprio_get = 252,
inotify_init = 253,
inotify_add_watch = 254,
inotify_rm_watch = 255,
migrate_pages = 256,
openat = 257,
mkdirat = 258,
mknodat = 259,
fchownat = 260,
futimesat = 261,
newfstatat = 262,
unlinkat = 263,
renameat = 264,
linkat = 265,
symlinkat = 266,
readlinkat = 267,
fchmodat = 268,
faccessat = 269,
pselect6 = 270,
ppoll = 271,
unshare = 272,
set_robust_list = 273,
get_robust_list = 274,
splice = 275,
tee = 276,
sync_file_range = 277,
vmsplice = 278,
move_pages = 279,
utimensat = 280,
epoll_pwait = 281,
signalfd = 282,
timerfd_create = 283,
eventfd = 284,
fallocate = 285,
timerfd_settime = 286,
timerfd_gettime = 287,
accept4 = 288,
signalfd4 = 289,
eventfd2 = 290,
epoll_create1 = 291,
dup3 = 292,
pipe2 = 293,
inotify_init1 = 294,
preadv = 295,
pwritev = 296,
rt_tgsigqueueinfo = 297,
perf_event_open = 298,
recvmmsg = 299,
fanotify_init = 300,
fanotify_mark = 301,
prlimit64 = 302,
name_to_handle_at = 303,
open_by_handle_at = 304,
clock_adjtime = 305,
syncfs = 306,
sendmmsg = 307,
setns = 308,
getcpu = 309,
process_vm_readv = 310,
process_vm_writev = 311,
kcmp = 312,
finit_module = 313,
sched_setattr = 314,
sched_getattr = 315,
renameat2 = 316,
seccomp = 317,
getrandom = 318,
memfd_create = 319,
kexec_file_load = 320,
bpf = 321,
execveat = 322,
userfaultfd = 323,
membarrier = 324,
mlock2 = 325,
copy_file_range = 326,
preadv2 = 327,
pwritev2 = 328,
pkey_mprotect = 329,
pkey_alloc = 330,
pkey_free = 331,
statx = 332,
io_pgetevents = 333,
rseq = 334,
pidfd_send_signal = 424,
io_uring_setup = 425,
io_uring_enter = 426,
io_uring_register = 427,
open_tree = 428,
move_mount = 429,
fsopen = 430,
fsconfig = 431,
fsmount = 432,
fspick = 433,
pidfd_open = 434,
clone3 = 435,
close_range = 436,
openat2 = 437,
pidfd_getfd = 438,
faccessat2 = 439,
process_madvise = 440,
epoll_pwait2 = 441,
mount_setattr = 442,
quotactl_fd = 443,
landlock_create_ruleset = 444,
landlock_add_rule = 445,
landlock_restrict_self = 446,
memfd_secret = 447,
process_mrelease = 448,
futex_waitv = 449,
set_mempolicy_home_node = 450,
cachestat = 451,
fchmodat2 = 452,
map_shadow_stack = 453,
futex_wake = 454,
futex_wait = 455,
futex_requeue = 456,
statmount = 457,
listmount = 458,
lsm_get_self_attr = 459,
lsm_set_self_attr = 460,
lsm_list_modules = 461,
}