#include #include #include #include #include extern uint8_t __start_target_section[]; extern uint8_t __stop_target_section[]; __attribute__((used, section("target_section"))) int target_function(void) { return 42; } typedef int (*target_function_t)(void); int main(void) { size_t target_function_size = __stop_target_section - __start_target_section; size_t page_size = sysconf(_SC_PAGESIZE); size_t page_aligned_size = (target_function_size + page_size - 1) & ~(page_size - 1); void *executable_memory = mmap(NULL, page_aligned_size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (executable_memory == MAP_FAILED) { perror("mmap"); return 1; } memcpy(executable_memory, __start_target_section, target_function_size); target_function_t func = (target_function_t)executable_memory; int result = func(); // Break here printf("Result from target function: %d\n", result); return 0; }