2024-06-04 21:50:17 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
2024-06-08 07:09:44 +00:00
|
|
|
// Switch Between Pipe/PTrace Mode
|
|
|
|
#define TRAMPOLINE_USE_PIPES_ENV "_MCPI_TRAMPOLINE_USE_PIPES"
|
2024-06-06 01:18:48 +00:00
|
|
|
|
|
|
|
// System Call Constants
|
2024-06-04 21:50:17 +00:00
|
|
|
#define MAX_TRAMPOLINE_ARGS_SIZE 2097152 // 2 MiB
|
|
|
|
#define TRAMPOLINE_SYSCALL 0x1337
|
|
|
|
|
2024-06-06 01:18:48 +00:00
|
|
|
// Pipe Constants
|
|
|
|
#define TRAMPOLINE_ARGUMENTS_PIPE_ENV "_MCPI_TRAMPOLINE_ARGUMENTS"
|
|
|
|
#define TRAMPOLINE_RETURN_VALUE_PIPE_ENV "_MCPI_TRAMPOLINE_RETURN_VALUE"
|
2024-06-08 08:23:03 +00:00
|
|
|
struct trampoline_pipe_arguments {
|
|
|
|
uint32_t id;
|
|
|
|
uint32_t allow_early_return;
|
|
|
|
uint32_t length;
|
|
|
|
uint32_t args_addr;
|
|
|
|
};
|
2024-06-06 01:18:48 +00:00
|
|
|
|
2024-06-04 21:50:17 +00:00
|
|
|
// Function Types
|
2024-06-08 08:23:03 +00:00
|
|
|
typedef void (*trampoline_writer_t)(uint32_t guest_addr, const void *data, uint32_t size);
|
2024-06-06 01:18:48 +00:00
|
|
|
typedef uint32_t (*trampoline_t)(trampoline_writer_t writer, uint32_t id, const unsigned char *args);
|