#pragma once #include "wirekit.hpp" extern err_t(*wirekit_prepare_handle)(); extern err_t(*wirekit_command_start_handle)(int, const char* const*); extern void(*wirekit_command_exit_handle)(); extern void(*wirekit_subject_start_handle)(); extern void(*wirekit_subject_exit_handle)(); // Exposure to wirekit is achieved by adding these functions to rewire's symbol tables #define EXPOSED __attribute__((visibility("default"))) EXPOSED err_t rewire_syscall_hook(reg_t syscall, hook_t entry, hook_t exit); EXPOSED err_t rewire_syscall_unhook(reg_t syscall); EXPOSED err_t rewire_syscall_hook_default(hook_t entry, hook_t exit); EXPOSED err_t rewire_syscall_unhook_default(); EXPOSED err_t rewire_subject_id(pid_t* pid); EXPOSED err_t rewire_subject_get_regs(user_regs_struct* regs); EXPOSED err_t rewire_subject_set_regs(const user_regs_struct* regs); EXPOSED err_t rewire_subject_load_cstr(const char* subject_addr, char* buf, uint32_t* read, uint32_t n);