- how to disassemble nano SwinSID b firmware -

Desensamblar el binario del firmware del nano SwinSID
Las siguientes líneas explican el procedimiento a seguir para desensamblar y depurar el binario del firmware del nano SwinSID. Para seguir los pasos descritos aquí, se necesita el software Microchip Studio 7 y un depurador/programador para ATmega con sus cables adecuados. Al final de la página hay disponible una solución de Microchip Studio 7 que permite editar y depurar el código desensamblado de la "versión de firmware "v24/5/2012".

El procedimiento descrito aquí se puede utilizar para desensamblar las diferentes versiones conocidas del firmware del nano SwinSID.

Obtener y depurar el código ensamblado
Microchip Studio 6 permitía desensamblar y depurar directamente archivos .hex, pero esta opción se eliminó en Microchip Studio 7, el cual ahora solo permite desensamblar y depurar archivos .elf. Sin embargo, Microchip Studio 7 sí permite convertir archivos .hex a .elf. Una vez tengamos el .elf ya podemos generar un proyecto para desensamblarlo y depurarlo. Para generar el .elf a partir del .hex en Microchip Studio 7 ir a "Tools> Device Programming" y allí, en "Tool", seleccionar "Simulator" y hacer click en "Apply". Luego, en las opciones "Production file", en "Save to ELF production file > Flash" indicar el archivo .hex a convertir a .elf y luego hacer click en "Save". Tras esto, se debería haber generado la versión .elf del archivo .hex original.

Opciones "Tools > Device programming" para convertir .hex a .elf.

En la sección "Production file", en "Save to ELF production file > Flash" especificar el archivo .hex a convertir y luego pulsar en "Save".
El siguiente paso para obtener el código ensamblador del archivo .elf generado y poder depurarlo es crear un proyecto "Microchip Studio project for debugging". Para crear este tipo de proyecto, ir a "File > Open > Open Object File For Debugging". En el cuadro de texto "Select the Object File to Debug", especificar el archivo .elf generado anteriormente y, en las opciones "Specify Project Name and path", establecer el nombre y la ubicación deseados para el nuevo proyecto. En la lista "Device Selection", seleccionar "ATmega88PA" y luego "Finish".

Ir a "File > Open > Open Object File For Debugging" para crear un proyecto para desensamblar y depurar el archivo .elf.

En la lista "Device Selection", seleccionar "ATmega88PA" y luego "Finish".
Conectar el ordenador al nanoSwinDID a través del debugger / programador y luego ir a "Debug > Start debugging and break" para comenzar a depurar. Si no se ha configurado previamente la herramienta de depuración, Microchip Studio mostrará un formulario para configurarla. En ese formulario, especificar el dispositivo que se va a utilizar para depurar (p.ej.Atmel-ICE) y en "Interface" seleccionar "debugWIRE".

Si no se ha configurado previamente, Microchip Studio pedirá configurar la herramienta de programación.
Seleccionar el programador correspondiente y la interfaz debugWIRE.
Para depurar el microcontrolador a través de la interfaz debugWIRE, primero se debe haber habilitado el "fuse" DWEN. Si no se ha habilitado, al ir a depurar, la herramienta preguntará si queremos que lo habilite. Como la interfaz debugWIRE utiliza la linea de reset para depurar el microcontrolador, el pin de reset del nano swinSID debe desconectarse de la linea de reset de la placa. Para deshabilitar el modo debugWIRE y restaurar el microcontrolador a condiciones normales, iniciar la aplicación como si estuviéramos depurando a través de debugWIRE y con esta en ejecución ir a "Debug > Disable debugWIRE and close", luego quitar la alimentación del microcontrolador y volver a encenderlo. Después de esto, debería ser posible programar de nuevo la aplicación en el microcontrolador utilizando la interfaz SPI.
A continuación, guardar el proyecto y volver a la opción "Debug > Start debugging and break" para comenzar la depuración. Una vez que comience la depuración, Microchip Studio mostrará el código desensamblado y permitirá seguir su ejecución paso a paso.

Microchip Studio mostrará el código desensamblado y permitirá seguir su ejecución paso a paso.
Aplicar ingeniería inversa sobre el código desensamblado
A pesar de que el proyecto creado permite depurar paso a paso el código desensamblado, no permite modificarlo. Para modificar y depurar el código de desensamblado, se debe crear un nuevo proyecto del tipo "Microchip Studio assembler project" para el ATmega88PA y luego pegar en él el código desensamblado generado anteriormente. ATmega88PA tiene una flash de 8Kbytes, y dado que todas las instrucciones AVR tienen 16 o 32 bits de ancho, la flash se organiza en 4K x 16bits (4Kword = 8Kbytes), por esa razón deberemos copiar desde la dirección 0x000 a la dirección 0xFFF.
No obstante ese código ensamblador generado previamente no se puede pegar directamente en el nuevo proyecto. Antes debe limpiarse y adaptar la sintaxis, de otra manera no compilará. Limpiar y adaptar la sintaxis consiste en eliminar toda la información inútil como direcciones de origen, números de línea de origen o comentarios inútiles (usé Notepad ++ para ese propósito) agregada por Microchip Studio.

In the "Device Selection" list, select "ATmega88PA" and then finish.
Otra forma de desensamblar un archivo .hex es usar la herramienta "avr-objdump" de la toolchain de ATmega (también se pueden usar otros desensambladores AVR / ATmega). Para usar "avr-objdump", en Microchip Studio ir primero a "Tools > Command prompt" para abrir una ventana del símbolo del sistema, desde allí navegar a la carpeta donde está el archivo .hex, luego escribir: "avr-objdump -D -z --disassemble-zeroes -m avr4 your_file.hex > your_file_dis.asm" ( avr-objdump -H para obtener todas las opciones de avr-objdump ).
Una vez limpiado y adaptada la sintaxis del código ensamblador, este debe pegarse en el archivo main.asm del "Microchip Studio assembly project" creado. Para iniciar la depuración, seguir los mismos pasos que con el proyecto anterior "Microchip Studio project for debugging": especificar la herramienta de depuración, seleccionar la interfaz debugWIRE y luego ir a "Debug > Start debugging and break".

Paste the modified and adapted assembly code into the clean ATmega88PA assembler project.
Llegados a este punto, comienza la parte más difícil del proceso de desensamblado, y consiste en tratar de entender exactamente qué hacen los diferentes bloques del código ensamblador generado. El desensamblador interpreta los códigos binarios en memoria como series de bits que corresponden a instrucciones del procesador (con su "opcode", operadores, accesos a memoria, etc.) y los traduce a su equivalente en instrucciones de ensamblador, pero es posible que estos códigos binarios realmente correspondan a bloques de datos en lugar de a instrucciones ( p.ej. los códigos binarios al final del binario SwinSID88_20120524.hex corresponden a datos de formas de onda, no a instrucciones). A menos que la información de depuración esté presente en el binario, otra dificultad añadida es que el desensamblador no proporciona ningún tipo de información de símbolos: traduce los accesos a variables como accesos a direcciones de memoria, y las llamadas a subrutinas como instrucciones jump o branch a direcciones de memoria. Se debe hacer un arduo trabajo de ingeniería inversa para entender bien estas situaciones y el funcionamiento del código.
Descargas
Los siguientes ficheros están disponibles para su descarga:
- Archivo .asm desensamblado: el archivo .asm resultante de desensamblar el binario del firmware correspondiente a la version "v24/5/2012" (este archivo .asm ya está incluido en la solución de Microchip Studio proporcionada).
- Solución Microchip Studio: una solución de Microchip Studio que permite compilar, depurar y modificar el fichero .asm resultante de desensamblar la versión "v24/5/2012" del firmware.

Estos archivos son el resultado de aplicar el proceso de ingeniería inversa descrito en esta página, y a pesar de haberlos probado, es posible que contengan errores. Todos los archivos se proporcionan "tal cual", sin garantías ni condiciones de ningún tipo, ya sean expresas o implícitas, incluidas, entre otras, las garantías o condiciones de título, comerciabilidad e idoneidad para un propósito particular. Es quién haga uso de estos el único responsable de determinar la conveniencia de usar o redistribuir el trabajo y asume cualquier riesgo asociado con ello.


... this page was last updated by Tolaemon on 12-2022 ...