Atmel AVR дизассемблер
Может кто-нибудь предложить мне какой-нибудь дизассемблер для 8-битных микроконтроллеров Atmel AVR? Есть проекты с открытым исходным кодом для этого?
Thanx.
7 ответов
[plug]IDA Pro поддерживает разборку AVR [/plug]:
Что касается 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 (который вам тоже не нужен) отсутствует.
Большой плюс в том, что он основан на сети.
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, у него есть инструмент для дизассемблирования, когда вы пишете код.
- Запустить проект (если у вас нет инструмента отладки, используйте симулятор, это не имеет смысла);
- Затем пауза;
- Чем CTRL + ALT + D разоберет ваш проект. Также сборка записана также в файле.lss, в папке отладки вашего проекта.