有人可以建议我使用Atmel AVR 8位微控制器的任何反汇编程序吗?有开源项目吗?
感谢名单。
答案 0 :(得分:12)
您还可以使用avr-objdump,avr-gcc工具集(http://www.nongnu.org/avr-libc/)的工具部分。例如:
avr-objdump -s -m <avr architecture> .d program.hex > program.dump
在http://www.nongnu.org/avr-libc/user-manual/using_tools.html
上找到<avr architecture>
答案 1 :(得分:11)
答案 2 :(得分:6)
答案 3 :(得分:5)
结帐vAVRdisasm。
答案 4 :(得分:1)
AVRDisassembler是一个用.NET Core编写的开源(MIT)AVR / Arduino反汇编程序(这意味着它可以在Windows,Mac,Linux上运行)。除了将反汇编写入stdout之外,它还可以发出JSON转储(用于互操作性,分析目的)。
免责声明:我是该库的作者。
答案 5 :(得分:0)
您想要反汇编(代码或hex文件)吗? 如果您正在使用Atmel工作室进行编码,则在编码时可以使用拆卸工具。
答案 6 :(得分:0)
我正在使用Johannes Bauer的avrdisas。它适用于转储的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
使用以下方法提取flash内容:
$ 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等。
答案 7 :(得分:0)
作为开源反汇编程序,我尝试了Radare2,它是面向命令行的,但是您也可以使用称为Cutter的GUI。 https://rada.re/n/
或者您也可以使用经典的avr-objdump:
avr-objdump.exe -j .sec1 -d -m avr5 dumpfile.hex