Atmel AVR反汇编程序

时间:2011-02-28 11:08:15

标签: microcontroller avr disassembly atmel

有人可以建议我使用Atmel AVR 8位微控制器的任何反汇编程序吗?有开源项目吗?

感谢名单。

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)

[plug] IDA Pro支持AVR反汇编[/ plug]:

IDA Pro AVR disassembly

至于opensource,AVR GCC包中包含一个objdump端口,包括反汇编功能。

答案 2 :(得分:6)

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

许多平台(AVR也),但Microchip(你也不需要)也没有。

大的好处是它是基于网络的。

答案 3 :(得分:5)

结帐vAVRdisasm

答案 4 :(得分:1)

AVRDisassembler是一个用.NET Core编写的开源(MIT)AVR / Arduino反汇编程序(这意味着它可以在Windows,Mac,Linux上运行)。除了将反汇编写入stdout之外,它还可以发出JSON转储(用于互操作性,分析目的)。

免责声明:我是该库的作者。

答案 5 :(得分:0)

您想要反汇编(代码或hex文件)吗? 如果您正在使用Atmel工作室进行编码,则在编码时可以使用拆卸工具。

  1. 运行项目(如果你没有调试工具,使用模拟器,它没有意义);
  2. 然后暂停;
  3. 比CTRL + ALT + D将反汇编您的项目。 此外,程序集也在.lss文件中编写,位于项目的debug文件夹中。

答案 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

Information source here