b18: S7 exit router + dstub trap + docs

This commit is contained in:
SashegDev
2026-09-12 10:30:18 +00:00
parent 67539f7351
commit 049f98122b
6 changed files with 1097 additions and 50 deletions
+23
View File
@@ -41,3 +41,26 @@
1. Добить баннер (см. свежий in_asm-хвост).
2. Заменить стаблеты настоящим PBL (нужны дампы с живого тела!).
3. UEFI (img3, EDK2) — отдельный фронт после SBL1.
## b18: S7 и цикл delay-helper (2026-09-12)
Механизм зацикливания (b17, доказан Unicorn-harness `tools/sbl_uni.py`):
- sbl_main → delay-функция `0x8013B78` (256-итераций table-walk, `bl 0x8017AF4`
каждую итерацию) → b14 (`0x8017AFC: b.w 0x8005B9E`) → helper `0x8005BB0`
→ выход `ldr pc,[sp],#0x14` (0x8005BCA) → S3-слот (0x8013BA5, рестарт).
- Эпилог delay (`0x8013BAC: pop {r3-r7,pc}`) снимает 0x18 без push; каждый
S3-рестарт съедает 0x18 живого стека. Маршрут: слоты → fill (STUBV →
pop pc = maze) → pristine IMEM (нули → null-jump → hook_null → maze →
stale lr) → переполнение IMEM (0x8610008).
- Heap SBL (stm в 0x8006684) затирает maze/S6/banner (0, 0x7a, STUBV).
QEMU: dstub-overlay `[0x08006B80,0x08006C50)` (read = снапшот ELF+стабы,
write = игнор). Uni: deferred-restore guard (MEM_WRITE-хук срабатывает
ДО записи, restore надо делать в hook_code!).
- Maze-blob: `movs r0,#0; lsr ip,lr,#24; cmp #8; bne hang; bx lr`
(возврат 0 только для lr из DDRLOW 0x08..., иначе hang).
Фикс b18: патч BAC (`f8bd0a4a``f3f730b8`, `b.w S7`) + S7-стаблет
(52B @ 0x08006C10): `cmp r4,#0xff` → iterate (`0x8013BA5`) или done
(restore r4/r5/sl/fp, возврат в sbl_main `0x802f681`). BAE-путь
(`[r7]==2`) принесён в жертву (r7=0, недостижим).
Фронтир b18: sbl_main возвращается, новый код `0x801Bxxx`
(`strb [r7,#2]`-паттерн, b17-NOP на 0x801B71E), падеж pop'ом пустого
стека у верха IMEM — следующий фронт.