#include #include #include #include #include #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); } }