runtime/native/src/main.cpp

38 lines
934 B
C++
Raw Normal View History

2024-06-04 17:22:15 -04:00
#include <unistd.h>
#include <cstring>
#include <cerrno>
#include <sys/ptrace.h>
#include <sys/wait.h>
#include "log.h"
#include "memory.h"
#include "trampoline.h"
#include "ptrace.h"
// Main
int main(__attribute__((unused)) int argc, char *argv[]) {
// Fork
pid_t pid = fork();
if (pid == -1) {
ERR("Unable To Fork Process: %s", strerror(errno));
} else if (pid == 0) {
// Child
ptrace(PTRACE_TRACEME, 0, 0, 0);
execvp(argv[1], (char *const *) &argv[1]);
ERR("Unable To Execute Program: %s: %s", argv[1], strerror(errno));
} else {
// Parent
// Wait For PTrace
waitpid(pid, nullptr, 0);
// Configure PTrace
ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_EXITKILL | PTRACE_O_TRACESYSGOOD);
// Setup Trampoline
init_memory(pid);
init_trampoline();
// Start PTrace Loop
loop_ptrace(pid);
}
}