Иногда в целях реверс-инжиниринга необходимо выгрузить код из микроконтроллера Arduino. На самом деле это не так сложно сделать, по крайней мере с микроконтроллерами серии AVR. И сегодня мы это покажем.
Итак, для начала на своем ПК с ОС Windows узнайте, на каком последовательном порту обнаружен Arduino Uno, в нашем случае это COM4.

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

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

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

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

Arduino IDE может предоставить вам hex-файл через меню Sketch->Export compiled Binary. Вы можете сгенерировать исполняемые hex-файлы, которые будут работать на вашем Uno из IDE, таких как WinAVR, CodeBlocks, MPLab, AtmelStudio и из командной строки.