#pragma once #include // Switch Between Pipe?PTrace Mode #ifdef MCPI_USE_NATIVE_TRAMPOLINE #define TRAMPOLINE_USE_PTRACE_ENV "_MCPI_TRAMPOLINE_USE_PTRACE" #endif // System Call Constants #define MAX_TRAMPOLINE_ARGS_SIZE 2097152 // 2 MiB #define TRAMPOLINE_SYSCALL 0x1337 // Pipe Constants #ifdef MCPI_USE_NATIVE_TRAMPOLINE #define TRAMPOLINE_ARGUMENTS_PIPE_ENV "_MCPI_TRAMPOLINE_ARGUMENTS" #define TRAMPOLINE_RETURN_VALUE_PIPE_ENV "_MCPI_TRAMPOLINE_RETURN_VALUE" struct trampoline_pipe_arguments { uint32_t id; uint32_t length; uint32_t args_addr; }; #endif // Function Types typedef void (*trampoline_writer_t)(uint32_t guest_addr, void *data, uint32_t size); typedef uint32_t (*trampoline_t)(trampoline_writer_t writer, uint32_t id, const unsigned char *args);