Скачать гекс и декомпилировать его из avr - PullRequest
0 голосов
/ 27 февраля 2020

У меня Orange PI с Ubuntu, подключенным к atmega328p через USB asp. Я разработал программу на C, скомпилировал ее, преобразовал в hex и загрузил на atmega, но из-за некоторого странного поведения файл. c потерян. Как я могу вернуть свою программу от atmega?

1 Ответ

1 голос
/ 27 февраля 2020

Хорошие новости: Возможно, окончательно.

Плохие новости: Но это большая работа, в зависимости от размера вашего приложения. Я делал это более одного раза с кодом AVR, написанным на C, BASCOM или C ++ (Arduino). Это займет несколько часов, например около 20 часов для 100-линейной линии в BASCOM.

Подход таков:

  1. Разобрать файл HEX. Используйте этот вывод в качестве ссылки. Возможно, вам понадобятся некоторые параметры, чтобы иметь все постоянные данные в выводе.
  2. Начните с наилучшего приближения источника, который все еще хранится в вашей памяти.
  3. Скомпилируйте, скомпонуйте и преобразуйте его в HEX-файл
  4. Разберите этот HEX-файл и сравните вывод со ссылкой.
  5. Повторяйте редактирование исходного кода, пока обе разборки не будут равны.

Примечания:

  • Вам необходимо глубокое понимание перевода из C в машинный код.
  • Имена функций и переменных не могут быть точно восстановлены. Эти имена исчезают после компиляции и компоновки.
  • Имейте в виду, что порядок функций в результирующем коде может не зависеть от их появления в исходном коде. Однако большинство компиляторов делают это.
  • Имейте в виду, что порядок переменных в памяти может зависеть не от их появления в источнике, а от их имени. Кроме того, они обычно не сортируются лексически, например, я обнаружил, что G CC использует какой-то алгоритм хеширования. Однако члены структур сохраняют свой порядок, потому что стандарт требует, чтобы.
  • На первом этапе игнорировали различия в размещении переменных.
  • Попробуйте определить функции библиотеки C, и игнорируй их. Особенно семейство printf() dr aws с множеством других функций. Когда ваш собственный код будет готов, библиотечные функции также будут там, скорее всего.

Последнее замечание: если у вас есть файл ELF, используйте его для разборки и поиска имен. Вы будете намного быстрее.

...