14

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

谢谢。

4

8 回答 8

15

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

于 2012-06-08T02:34:39.207 回答
13

[plug]IDA Pro支持AVR拆解[/plug]:

IDA Pro AVR 拆解

至于开源,AVR GCC包包含一个 objdump 的端口,包括反汇编功能。

于 2011-02-28T11:17:17.190 回答
6

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

很多平台(也包括 AVR)但缺少 Microchip(您也不需要)。

最大的优点是它是基于网络的。

于 2013-08-13T06:56:23.603 回答
5

结帐vAVRdisasm

于 2011-03-17T16:48:28.183 回答
1

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

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

于 2017-02-18T18:27:07.333 回答
0

我正在使用Johannes Bauer 的avrdisas。它适用于转储闪存,而不是 .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 等。

于 2018-02-28T08:18:33.297 回答
0

作为开源反汇编程序,我尝试过面向命令行的 Radare2,但您也可以使用名为 Cutter 的 GUI。https://rada.re/n/

或者你可以只使用经典的 avr-objdump:

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

信息来源在这里

于 2020-05-05T21:28:11.863 回答
-2

问题是关于反汇编 HEX 文件,作为一种解决方案,上面在其他答案中提到了很多工具。很难再添加一些东西。

但是如果有人在寻找:在 IDE 中运行时也可以反汇编 C/C++。使用带有集成拆卸工具的 Atmel studio,可以通过以下方式完成:

  1. 运行项目(可以在没有调试器硬件的模拟器中运行);
  2. 在断点处暂停或停止;
  3. 按 CTRL + ALT + D

这对于验证是否根据需要编译特定代码片段很有用,因为优化有时会跳过/破坏序列并导致一些意外行为。

于 2016-06-14T07:29:36.353 回答