emcyfra/runner.c

61 lines
1.7 KiB
C
Raw Normal View History

2025-02-17 09:09:14 +00:00
#include <platform/platform.h>
#include <platform/printf.h>
#include <stdint.h>
2025-02-17 23:46:39 +00:00
#define RAM_START 0x00300000
#define RAM_END RAM_START + 0x00800000
#define LIB_MAGIC 0x88DAD0F2
2025-02-17 09:09:14 +00:00
2025-02-17 23:46:39 +00:00
typedef int (*func_t)();
2025-02-17 09:09:14 +00:00
void execute_library_function() {
printf("Scanning RAM...\n");
2025-02-17 23:46:39 +00:00
uint32_t *ptr = (uint32_t *)RAM_START;
2025-02-17 09:09:14 +00:00
while ((uint32_t)ptr < RAM_END) {
if (*ptr == LIB_MAGIC) {
2025-02-17 23:46:39 +00:00
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");
2025-02-17 09:09:14 +00:00
func_t test_func = (func_t)entry_point;
if (test_func) {
2025-02-17 23:46:39 +00:00
printf("Try exec...0x%X 0x%X\n", entry_point,
0x20000034 + 0x10);
2025-02-17 09:09:14 +00:00
printf(">> %d\n", test_func());
}
2025-02-17 23:46:39 +00:00
*/
uint32_t entry_point = 0x300044 | 1;
func_t test_func = (func_t)entry_point;
printf("> Entry point\n", entry_point);
int res = test_func();
printf(">> %d\n", res);
2025-02-17 09:09:14 +00:00
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");
}