• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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 ...) ?
 
Сверху Снизу