#include #include #include #define RAM_START 0x20000000 #define RAM_END RAM_START + 0x00800000 #define LIB_MAGIC 0x88DAD0F2 typedef int (*func_t)(); void execute_library_function() { printf("Scanning RAM...\n"); uint32_t *ptr = (uint32_t *)RAM_START; while ((uint32_t)ptr < RAM_END) { if (*ptr == LIB_MAGIC) { printf("Found libpqscheme_test 0x%X!\n", ptr); printf("1>...%X 0x%X\n", ptr + 1, *(ptr + 1)); printf("2>...%X 0x%X\n", ptr + 2, *(ptr + 2)); printf("3>...%X 0x%X\n", ptr + 3, *(ptr + 3)); for (size_t i = 0; i < 20; i++) { printf("%X %2X \n", (((uint8_t *)ptr) + i), *(((uint8_t *)ptr) + i)); } /* uint32_t entry_point = *((uint32_t *)(ptr + 0x10)); uint8_t *p = (uint8_t *)entry_point; printf("\n"); func_t test_func = (func_t)entry_point; if (test_func) { printf("Try exec...0x%X 0x%X\n", entry_point, 0x20000034 + 0x10); printf(">> %d\n", test_func()); } */ uint32_t entry_point = (0x20000000 + 0x44) | 1; func_t test_func = (func_t)entry_point; printf("> Entry point\n", entry_point); int res = test_func(); printf(">> %d\n", res); return; } ptr++; } printf("Test binary not found!\n"); } void main() { platform_init(PLATFORM_CLOCK_MAX); platform_sync(); printf("Runner started\n"); execute_library_function(); printf("Execution finished\n"); }