From 503c334b2e26ef791a817fc29c49c028db54c679 Mon Sep 17 00:00:00 2001 From: lumia-emu Date: Mon, 14 Sep 2026 00:15:36 +0000 Subject: [PATCH] IMEM tripwire (poison broke stack) --- docs/sbl-bringup.md | 3 +++ qemu/saimaa.c | 6 +++--- tools/sbl_uni.py | 11 ++++++----- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/docs/sbl-bringup.md b/docs/sbl-bringup.md index 9084ba5..9fd508c 100644 --- a/docs/sbl-bringup.md +++ b/docs/sbl-bringup.md @@ -171,3 +171,6 @@ - Assert-hang `0x8018458` (`b .`) достигается напрямую через maze-stale-lr (мимо патченного wrap-check). `b .` → `b success` (2B, в success-путь). +- Урок: полный IMEM-poison ломает IMEM-стек (счётчики читают + 0xFFFFFFFF вместо свежих нулей → underflow → wild-pop). Только + tripwire 16B на входе дрейфа `[0x8600000,0x8600010)`. diff --git a/qemu/saimaa.c b/qemu/saimaa.c index 0f8d902..66673ed 100644 --- a/qemu/saimaa.c +++ b/qemu/saimaa.c @@ -822,12 +822,12 @@ static void saimaa_machine_init(MachineState *machine) cpu_physical_memory_write(a, &fill, 4); } } - /* IMEM poison [0x8600000,0x8600F00): drift-sink trap (UDF in - * both modes). IMEM stack [0x8600F00,0x8610000) intact. */ + /* IMEM tripwire [0x8600000,0x8600010): drift-sink trap. + * Rest of IMEM stays zeros (SBL stack reads data there). */ { uint32_t p = 0xFFFFFFFF; uint32_t a; - for (a = 0x08600000; a < 0x08600F00; a += 4) { + for (a = 0x08600000; a < 0x08600010; a += 4) { cpu_physical_memory_write(a, &p, 4); } } diff --git a/tools/sbl_uni.py b/tools/sbl_uni.py index 48e7fdf..9343f31 100644 --- a/tools/sbl_uni.py +++ b/tools/sbl_uni.py @@ -474,11 +474,12 @@ def main(): "60474af20007c0f2730747f2797cc0f6000c6047")) # stack zone fill (STUBV odd) mu.mem_write(0x085F0000, struct.pack("