Atmel AVR дизассемблер

Может кто-нибудь предложить мне какой-нибудь дизассемблер для 8-битных микроконтроллеров Atmel AVR? Есть проекты с открытым исходным кодом для этого?

Thanx.

7 ответов

Решение

[plug]IDA Pro поддерживает разборку AVR [/plug]:

IDA Pro AVR разборка

Что касается OpenSource, пакет AVR GCC включает в себя порт objdump, включая функции разборки.

Вы также можете использовать avr-objdump, инструментальную часть набора инструментов avr-gcc ( http://www.nongnu.org/avr-libc/). Пример:

avr-objdump -s -m <avr architecture> .d program.hex > program.dump

где <avr architecture> находится на http://www.nongnu.org/avr-libc/user-manual/using_tools.html

http://www.onlinedisassembler.com/odaweb/

Множество платформ (также AVR), но Microchip (который вам тоже не нужен) отсутствует.

Большой плюс в том, что он основан на сети.

Оформить заказ vAVRdisasm.

AVRDisassembler - это дизассемблер AVR / Arduino с открытым исходным кодом (MIT), написанный на.NET Core (что означает, что он может работать на Windows, Mac, Linux). Помимо записи разборки в стандартный вывод, он также может генерировать дамп JSON (для возможности анализа и анализа).

Отказ от ответственности: я являюсь автором указанной библиотеки.

В качестве дизассемблера с открытым исходным кодом я пробовал Radare2, ориентированный на командную строку, но вы также можете использовать графический интерфейс под названием Cutter. https://rada.re/n/

Или вы можете просто использовать классический avr-objdump:

avr-objdump.exe -j .sec1 -d -m avr5 dumpfile.hex

Источник информации здесь

Я использую аврдис Йоханнеса Бауэра. Он работает со сброшенной флэш-памятью, а не с файлом.hex или ELF.

Составление следующего:

  .include "tn13def.inc"
       ldi     r16,1
       out     ddrb,r16      ; PB0 as output
       sbiw    r24,1         ; slight wait
       brne    PC-1
       sbi     pinb,pinb0    ; toggle
       rjmp    PC-3          ; forever 

производит листинг:

C:000000 e001             ldi     r16,1
C:000001 bb07             out     ddrb,r16      ; PB0 as output
C:000002 9701             sbiw    r24,1         ; slight wait
C:000003 f7f1             brne    PC-1
C:000004 9ab0             sbi     pinb,pinb0    ; toggle
C:000005 cffc             rjmp    PC-3          ; forever

извлечение содержимого флэш-памяти с помощью:

$ avrdude -p t13 -P usb -c usbtiny -U flash:r:flash.bin:r

дает: e001 bb07 9701 f7f1 9ab0 cffc

разборка:

$ ./avrdisas -a1 -o1 -s1 flash.bin 
; Disassembly of flash.bin (avr-gcc style)

.text
main:
   0:   01 e0           ldi     r16, 0x01       ; 1
   2:   07 bb           out     0x17, r16       ; 23

; Referenced from offset 0x06 by brne
; Referenced from offset 0x0a by rjmp
Label1:
   4:   01 97           sbiw    r24, 0x01       ; 1
   6:   f1 f7           brne    Label1
   8:   b0 9a           sbi     0x16, 0         ; 0x01 = 1
   a:   fc cf           rjmp    Label1

и это работает для меня, даже если порядковый номер не соответствует списку, и мне нужно будет разрешить 0x17 обратно в DDRB и т. д.

Что вы хотите, чтобы разборка (код или шестнадцатеричный файл)? Если вы программируете с Atmel studio, у него есть инструмент для дизассемблирования, когда вы пишете код.

  1. Запустить проект (если у вас нет инструмента отладки, используйте симулятор, это не имеет смысла);
  2. Затем пауза;
  3. Чем CTRL + ALT + D разоберет ваш проект. Также сборка записана также в файле.lss, в папке отладки вашего проекта.
Другие вопросы по тегам