Desensamblar código de Arduino

Leer y grabar flash de Arduino y desensamblar el programa

Arduino Nano

Accedemos a la carpeta donde están los ejecutables del AVR...

cd ~/datos/arduino/arduino-1.8.18/hardware/tools/avr/bin  

La siguiente instrucción graba el contenido de la flash del Arduino en un fichero .bin

./avrdude -p atmega328p -C "/home/usuario/datos/arduino/arduino-1.8.18/hardware/tools/avr/etc/avrdude.conf" -P /dev/ttyUSB1 -c arduino -U flash:r:flash.bin:r  

Se puede grabar el contenido en formato .HEX con la siguiente orden...

./avrdude -p atmega328p -C "/home/usuario/datos/arduino/arduino-1.8.18/hardware/tools/avr/etc/avrdude.conf" -P /dev/ttyUSB1 -c arduino -U flash:r:flash.hex:i  

Si queremos desensamblar el .HEX para convertirlo en código Assembler podemos usar...

./avr-objdump -Dx -m avr5 flash.hex   


Arduino Pro Micro

Accedemos a la carpeta donde están los ejecutables del AVR...

cd ~/datos/arduino/arduino-1.8.18/hardware/tools/avr/bin   

Antes de poder ejecutar las siguientes instrucciones hay que hacer un hard reset al Arduino Pro Micro cruzando los pin RST y GND. Después de hacer el reset hay 8 segundos antes de que el programa grabado en el Arduino Pro Micro se vuelva a poner en ejecución. Es decir, que antes de que pasen 8 segundos habría que ejecutar las órdenes siguientes que leen la memoria flash del Arduino.

Ejecutamos órdenes similares a las del Nano pero cambiando el modelo de microprocesador y el puerto de conexión:

Si queremos grabar el contenido en un fichero .BIN podemos lanzar...

./avrdude -p m32u4 -C "/home/usuario/datos/arduino/arduino-1.8.18/hardware/tools/avr/etc/avrdude.conf" -P /dev/ttyACM0 -c arduino -b 1200   

Si queremos descargar el contenido en un fichero .HEX para luego desensamblarlo ejecutamos...

./avrdude -p m32u4 -C "/home/usuario/datos/arduino/arduino-1.8.18/hardware/tools/avr/etc/avrdude.conf" -P /dev/ttyACM0 -c avr109 -U flash:r:flash.hex:i   

Finalmente, para desensamblar el .HEX a un .ASM ejecutamos...

./avr-objdump -Dx -m avr5 flash.hex   

La siguiente instrucción graba el contenido de la flash del Arduino en un fichero .bin

./avrdude -p atmega328p -C "/home/usuario/datos/arduino/arduino-1.8.18/hardware/tools/avr/etc/avrdude.conf" -P /dev/ttyUSB1 -c arduino -U flash:r:flash.bin:r   

Se puede grabar el contenido en formato .HEX con la siguiente orden...

./avrdude -p atmega328p -C "/home/usuario/datos/arduino/arduino-1.8.18/hardware/tools/avr/etc/avrdude.conf" -P /dev/ttyUSB1 -c arduino -U flash:r:flash.hex:i   

Si queremos desensamblar el .HEX para convertirlo en código Assembler podemos usar...

./avr-objdump -Dx -m avr5 flash.hex