В некоторых случаях, особенно при реверс инжиниринге, необходимо получить код из микроконтроллера. В случае с Arduino это тоже бывает актуально, и самое главное, что это возможно. Полученный код будет в шестнадцатеричной формате hex-файла, и в данном материале мы рассмотрим как реализовать такую выгрузку кода из Arduino, используя программатор avrdude.

Итак, в нашем случае плата Arduino обнаруживается на последовательном порту USB COM4.

Мы откроем окно командной строки через cmd и введем следующую строку:
avrdude -p atmega328p -c arduino -P com4 -U flash:r:board.hex:iПК прочитает программу во флэш-памяти платы Arduino и запишет на компьютер файл с именем «board.hex».

Измените :r: на :w: и вы сможете записать шестнадцатеричный файл обратно во флэш-память Arduino. Или загрузить его на другую плату.
avrdude -p atmega328p -c arduino -P com4 -U flash:w:board.hex:iПрограмма под названием avr-objdump позволит вам дизассемблировать исполняемый код в ассемблерный код, который вы сможете прочитать и реконструировать. Программа avr-objdump имеет множество опций.

Avr-objdump конвертирует исполняемые файлы. Здесь он генерирует дизассемблерный код.

Файлы в шестнадцатеричном формате Intel можно открыть и прочитать с помощью блокнота или специальной программы для чтения шестнадцатеричных файлов. Эмуляторы могут загружать и запускать шестнадцатеричную программу так же, как аппаратное устройство.

Arduino IDE может предоставить вам шестнадцатеричный файл через меню Sketch-Export скомпилированный двоичный файл. Вы можете создавать исполняемые шестнадцатеричные файлы, которые будут работать на вашем Arduino, из IDE, таких как WinAVR, CodeBlocks, MPLab, AtmelStudio, и из командной строки.
© digitrode.ru