#include #include #include #define PID_SNAKE 0 #define PAGE_SIZE 4096 #define DATA_SEG_SIZE (4 * PAGE_SIZE) typedef struct Food { char hint[16]; int x; int y; int score; } Food; char __attribute__((aligned(0x1000))) snake_seg_data[DATA_SEG_SIZE]; // this attribute is necessary to make the pointer 4K aligned int main() { Food* food = NULL; lml_mmap(PID_SNAKE, (void*)0x0804d000, (void*)snake_seg_data, DATA_SEG_SIZE); // data segment: // Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align // LOAD 0x004000 0x0804d000 0x0804d000 0x0163c 0x12500 RW 0x1000 // 'This is a food' starts @ file offset 0x542c, while .data starts @ 0x4000 // so, offset is 0x142c food = (Food*)(snake_seg_data + 0x142c); // printf("%s\n", food->hint); while (1) { // printf("%d %d", food->x, food->y); if (food->x <= 0) food->x = 1; if (food->y <= 0) food->y = 1; if (food->x >= 70) food->x = 69; if (food->y >= 25) food->y = 24; // according to some trial, XMAX(right veritcal line border)=69, YMAX(low edge of screen)=24 } return 0; }