#pragma once #include #include // Common struct Trampoline { virtual ~Trampoline() = default; // Error Codes enum class Error : uint32_t { NONE = 0, // Generic COMMAND_TOO_BIG, // System Call SYSCALL, // Pipe MISSING_PIPE, INVALID_PIPE, PIPE_WRITE, PIPE_READ }; // Call virtual Error call(uint32_t id, uint32_t *ret_ptr, uint32_t length, const unsigned char *args) = 0; }; // Syscall Method struct SyscallTrampoline final : Trampoline { static bool should_use(); Error call(uint32_t id, uint32_t *ret_ptr, uint32_t length, const unsigned char *args) override; }; // Pipe Method struct PipeTrampoline final : Trampoline { PipeTrampoline(); Error call(uint32_t id, uint32_t *ret_ptr, uint32_t length, const unsigned char *args) override; private: Error status; int arguments_pipe; int return_value_pipe; };