Files
ctfs/random_challs/mad_seccomp/read_file.c
T
2024-10-28 16:25:49 +03:00

44 lines
920 B
C

#include <sys/syscall.h>
#include <stdio.h>
#include <linux/openat2.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main(void){
// get syscall num
printf("openat2: %d\n", SYS_openat2);
printf("pread64: %d\n", SYS_pread64);
printf("writev: %d\n", SYS_writev);
// struct
struct open_how how;
memset(&how, 0, sizeof(how));
how.flags = O_RDWR;
how.resolve = RESOLVE_IN_ROOT;
size_t size = sizeof(how);
// openat2
const char *file = "flag.txt";
long rax = syscall(SYS_openat2, AT_FDCWD, file, &how, size);
printf("fd: %d\n", rax);
// pread64
char buf[64];
long rax2 = syscall(SYS_pread64, rax, buf, 100, 0);
printf("string size: %d\n", rax2);
// struct
char *str = "Some string here";
struct iovec {
void *iov_base;
size_t iov_len;
};
struct iovec iov[1];
iov[0].iov_base = str;
iov[0].iov_len = strlen(str);
// writev
syscall(SYS_writev, 1, iov, 1);
return 0;
}