【问题标题】:Atmel AVR Disassembler爱特梅尔 AVR 反汇编程序
【发布时间】:2011-02-28 11:08:14
【问题描述】:

谁能给我推荐一款适用于 Atmel AVR 8 位微控制器的反汇编程序?有这方面的开源项目吗?

谢谢。

【问题讨论】:

  • 在这个问题avr-objdump.exe -j .sec1 -d -m avr5 dumpfile.hex 之前已经有将近 6 年的答案了,我今天测试了它,因为我正在研究 atmega328p 逆向工程。 Information source here

标签: microcontroller avr disassembly atmel


【解决方案1】:

您还可以使用 avr-objdump,它是 avr-gcc 工具集 (http://www.nongnu.org/avr-libc/) 的工具部分。例如:

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

&lt;avr architecture&gt;http://www.nongnu.org/avr-libc/user-manual/using_tools.html 上的位置

【讨论】:

  • 对我有用的命令是:avr-objdump -s -m avr5 test.hex
  • 嘿@DavidGrayson 你还在用这个程序吗?今天使用什么命令?我找不到要执行的avr-objdump 文件。
  • avr-objdump 是 binutils 的一部分,应该在 GCC for AVR 的任何发行版中可用。我会给你更多细节,但你没有说你的操作系统。
  • 这几天好像-s不给你拆机;您必须改用-D。此外,AVR 架构参数取决于您要反汇编的芯片,您可能需要查看 GCC 源代码中的config/avr/avr-mcus.def 以确定您的 AVR 架构是什么。
【解决方案2】:

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

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

【讨论】:

  • 您可以以 1879 美元的实惠价格获得 IDA PRO,我认为还是坚持使用open source solution
【解决方案3】:

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

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

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

【讨论】:

  • 看起来承诺很长,交货时间很短。 AVR25是垃圾。反汇编应该匹配列表文件操作。
【解决方案4】:

结帐vAVRdisasm

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

      我正在使用 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
      

      使用以下方法提取 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
      

      这对我有用,即使字节序与列表不匹配,我也需要将 0x17 解析回 DDRB 等。

      【讨论】:

        【解决方案7】:

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

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

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

        Information source here

        【讨论】:

          【解决方案8】:

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

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-09
            • 1970-01-01
            相关资源
            最近更新 更多