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

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

Thanx.

7 ответов


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

IDA Pro AVR disassembly

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


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

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 также), но микрочип (который вам тоже не нужен) отсутствует.

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


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


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

отказ от ответственности: я автор библиотеки.


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

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

я использую avrdisas Йоханнес Бауэр. Он работает с dumped flash, а не с .файл 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

и это работает для меня, даже если endian-ness не соответствует листингу, и мне нужно будет разрешить 0x17 обратно в DDRB так далее.