Atmel AVR 反汇编器

发布于 2024-10-19 23:08:32 字数 64 浏览 1 评论 0 原文

有人可以向我推荐 Atmel AVR 8 位微控制器的反汇编程序吗?有这方面的开源项目吗?

谢谢。

Can somebody suggest me any disassembler for Atmel AVR 8-bit microcontrollers? There are opensource projects for this?

Thanx.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

金橙橙 2024-10-26 23:08:32

您还可以使用 avr-objdump,它是 avr-gcc 工具集的工具部分(http://www.avr-objdump)。 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

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

夜唯美灬不弃 2024-10-26 23:08:32

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

IDA Pro AVR 反汇编

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

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

IDA Pro AVR disassembly

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

十二 2024-10-26 23:08:32

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

很多平台(还有 AVR),但 Microchip(你没有需要任一)丢失。

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

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.

瞎闹 2024-10-26 23:08:32

查看vAVRdisasm

Checkout vAVRdisasm.

最美的太阳 2024-10-26 23:08:32

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

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

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.

姜生凉生 2024-10-26 23:08:32

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

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.

遇见了你 2024-10-26 23:08:32

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

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

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

信息来源此处

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

划一舟意中人 2024-10-26 23:08:32

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

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

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

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文