|
Короткая справка для тех, кто открывает дампы скалеров MStar (ныне MediaTek) в дизассемблере. В SPI-флеше таких скалеров обычно не один вид кода, а два.
8051 (MCS-51) Классическое 8-битное ядро, обычно служебное. • В начале программы — таблица векторов: подряд команды LJMP (байт 02 и два байта адреса) на позициях 0x0000, 0x0003, 0x000B, 0x0013 и т. д. • Начальный код часто выглядит так: CLR EA (C2 AF), затем запись в регистры через MOV DPTR,#… и MOVX. • Программа 8051 может лежать не с начала файла, а после служебного заголовка. Тогда базу надо выставить по таблице векторов, иначе все переходы «съедут».
Aeon R2 32-битное RISC-ядро MStar, родственное OpenRISC, но с командами переменной длины (2, 3 или 4 байта). • Если дизассемблировать его как OpenRISC32 или ARM, получится мусор — это частая ошибка. • Признаки рядом с кодом: строки MStar (пути вида src/…, «SPI BOOT», сообщения про MIU/DDR), обработчики исключений, выровненные по границе 0x100.
Чем смотреть • 8051 — Ghidra (штатный процессор 8051), IDA. • Aeon — штатно в Ghidra нет; есть сторонний модуль ghidra-aeon на GitHub (shinyquagsire23). Он неполный, но прологи функций и переходы разбирает. • Сверяться удобно с исходниками MStar, выложенными в открытых репозиториях (например, функции разбора стека R2).
Практические выводы • Строки вида «Chip ID: …» в загрузчике — это константы, а не результат чтения чипа. Определять по ним модель скалера надо осторожно. • Загрузчик в дампе ещё не значит, что в дампе есть основная программа: он может копировать и распаковывать следующий образ из другой области памяти. Если описанная им область лежит за концом файла, дамп неполный.
|