Перейти к содержанию
    

Перевод дизассемблера обратно в исходник

Поэтому я начинаю "разбор" с них.

Разбор обычно начинают с КОМАНД, а не с полей констант. Тем более, что таблицы констант в ассемблере PIC18 могут быть оформлены и как табличное чтение и как функция команды retlw <const>. Если последний вариант дизассемблируется достаточно очевидно (там нечего искать, достаточно начального адреса стандартного блока с retlw), то вариант с табличным чтением программного флеша совершенно неопределенное занятие без разбора адресующего эту таблицу кода. Ибо при побайтной упаковке таблицы во флеш эта таблица ничем от исполняемого кода внешне не отличается.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Под "разбором" с литералами-константами подразумевал следующее.

После получения "сырого" листинга disasm первоочередная задача - сократить его длину, убирая "бредо-код", соответствующий различным данным.

Самое простое - это просмотреть дамп бинарника в символьном виде и диапазоны адресов, которые явно не являются кодом, например строки для LCD,

определить в исходнике асм как DB. Если использовать IDA - значительную часть этой работы выполняется (полу)автоматически.

Процесс творческий и итерационный. У каждого процессора - свои ньюансы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

например строки для LCD,

определить в исходнике асм как DB.

Извините, но Вы - жертва стереотипов.

С чего Вы взяли, что строки для LCD будут обязательно определены как DB?

Элементарно и целесообразно их определять как DW.

Но дело даже не в этом. Я не понимаю чем поможет восстановлению исходника отделение полей констант. Ну отделили, и что?

И LCD может быть графическим, и упаковка графики не иметь формата экрана, а состоять из примитивов...

Опять же главное в восстановлении исходника - восстановление глобального алгоритма, а так же выделение основных функций этого алгоритма.

Поэтому начинать надо с выделения main, то есть участка общей инициализации и главного цикла (суперлупа). И из функций вызываемых этим циклом развернуть остальной код.

А где будут константы, - укажут команды табличного чтения. Это элементарно и определяется В САМОМ КОНЦЕ реверсинжиниринга.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините, но Вы - жертва стереотипов.
Не исключаю. Позволю себя процитировать :)
Процесс творческий и итерационный. У каждого процессора - свои ньюансы.
Поскольку Вы хорошо знаете платформу (PIC), а я - нет (последние 5 лет "сижу" на MSP430) - Вы правы.

Да и ТС выкладывать прошивку не пожелал . . .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...