Disasm rom-bios esp8266 (ida)

pvvx

Активный участник сообщества
"Быстрый старт" :) :
1) Скачиваем и устанавливаем IDA от 6.6 (искать в торентах)
2) Запускам Web-север с прошивкой не старее 24.02.15 и считываем необходимую область памяти:
IDA_web.gif
3) Запускаем IDA, в ней File->Script file и выбираем "xtensa.py".
4) Загружаем считанный bin файл и устанавливаем проц = Tensilica Xtensa [xtensa] и жмем Set, OK
5) Устанавливаем адреса:
IDA_addr.gif
6) Опять выбираем File->Script file и теперь выбираем "ESP8266_bios.idc".

Добавляем окно сегметнов: View->Open subview->Segments и жмыкам ROM секцию.
Всё. Предварительный disasm ROM готов:
IDA_bios.gif

Скрипты "xtensa.py" и "ESP8266_bios.idc" с названиями процедур, сегментами и т.д. приложены:
 

Вложения

Последнее редактирование:

mrwhite

New member
Спасибо за информацию!
А подскажите, как дизассемблировать готовые прошивки, загружающиеся по адресу 0x00000?
Делаю как тут написано, но в коде не совпадают смещения и второй скрипт (ESP8266_bios.idc) вылетает с ошибкой "Bad declaration" после создания сегментов. В окне вывода ошибок нет.
 

pvvx

Активный участник сообщества
Спасибо за информацию!
А подскажите, как дизассемблировать готовые прошивки, загружающиеся по адресу 0x00000?
Делаю как тут написано, но в коде не совпадают смещения и второй скрипт (ESP8266_bios.idc) вылетает с ошибкой "Bad declaration" после создания сегментов. В окне вывода ошибок нет.
Ошибки там возможны, т.к. сборка скриптов делалась кое как и в ручную. Просто запустите его повторно. Его цель всего-то предать названия функций из eagle.rom.addr.v6.ld .
Пример IDB (IDA Version 6.6) c Web с SDK 1.0.0. https://yadi.sk/d/Yi248tHrfc6fA Там начальный этап - загружены все необходимые бинарники и кое какие переработанные вручную данные из map файлов.
 

mrwhite

New member
Спасибо, посмотрю.
Я тут немного разобрался с загрузкой готовых прошивок. В отличие от дампа памяти у них структура сложнее - внутри несколько секций. После загрузки файла в IDA надо вручную создать сегменты и переместить их по правильным адресам.
Единственный момент остался - скрипт ESP8266_bios.idc видимо определяет не все импорты из SDK 1.0.0. Где бы взять посвежее?
 

pvvx

Активный участник сообщества
Я тут немного разобрался с загрузкой готовых прошивок. В отличие от дампа памяти у них структура сложнее - внутри несколько секций. После загрузки файла в IDA надо вручную создать сегменты и переместить их по правильным адресам.
Надо сразу грузить в правильные адреса.
Единственный момент остался - скрипт ESP8266_bios.idc видимо определяет не все импорты из SDK 1.0.0.
Все для ROM-BIOS из eagle.rom.addr.v6.ld. Других для ROM-BIOS нет и с кодами от SDK он не связан.
Где бы взять посвежее?
Делается вручную из map файла, создаваемого при трансляции. В Makefile добавляется " -Wl,-Map -Wl,$(@:.out=.map) " в "LINKFLAGS_eagle.app.v6 =" , если структура Makefile подобная Espressif ...
 

mrwhite

New member
Надо сразу грузить в правильные адреса.
Тогда надо свой загрузчик писать, чтобы разбирал секции в файле прошивки. Не дошли руки пока до этого.

Делается вручную из map файла, создаваемого при трансляции.
Компилятор пока не настраивал, но, видимо, придется.
 

pvvx

Активный участник сообщества
У кого есть исправленный "xtensa.py", а то имеющийся врет на некоторые команды (в частности дает неправильный операнд у movi ...) ?
 
Сверху Снизу