44 lines
920 B
C
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;
|
|
} |