开发者

Atmel AVR Disassembler

Can somebody suggest me any disassembler for At开发者_如何学Cmel AVR 8-bit microcontrollers? There are opensource projects for this?

Thanx.


You can also use avr-objdump, a tool part of the avr-gcc toolset ( http://www.nongnu.org/avr-libc/ ). Ex:

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

where <avr architecture> is found on http://www.nongnu.org/avr-libc/user-manual/using_tools.html


[plug]IDA Pro supports AVR disassembly[/plug]:

Atmel AVR Disassembler

As for opensource, AVR GCC package includes a port of objdump, including disassembling functionality.


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

Lots of platforms (AVR also) but Microchip (which you didn't need either) is missing.

Big plus is that it is web based.


Checkout vAVRdisasm.


AVRDisassembler is an open source (MIT) AVR / Arduino disassembler written in .NET Core (which means it can run on Windows, Mac, Linux). Apart from writing the disassembly to stdout, it can also emit a JSON dump (for interopability, analysis purposes).

Disclaimer: I am the author of said library.


I'm using avrdisas by Johannes Bauer. It works with dumped flash, rather than the .hex file or ELF.

Compiling the following :

  .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 

produces listing:

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

extracting the flash contents with:

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

gives: e001 bb07 9701 f7f1 9ab0 cffc

disassembly:

$ ./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

and this works for me, even if the endian-ness does not match the listing and I would need to resolve 0x17 back to DDRB etc.


As opensource disassembler I've tried Radare2 which is command-line oriented but you can also use the GUI called Cutter. https://rada.re/n/

Or you can just use the classical avr-objdump:

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

Information source here


The question is rather about disassembling the HEX file and as a solution there are mentioned quite a lot tools above in other answers. Hard to add something more.

But if someone is looking for: it is also possible to disassemble the C/C++ while running in IDE. With Atmel studio with its integrated disassembling tool it can be done following way:

  1. Run project (it can be run in simulator without debugger hardware);
  2. Pause or stop at breakpoint;
  3. Press CTRL + ALT + D

This can be useful in order to verify that particular code fragments are compiled as needed because the optimization sometimes skips/mangles the sequence and leads to some unexpected behavior.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜