14

誰かが私にAtmelAVR8ビットマイクロコントローラー用の逆アセンブラーを提案できますか?このためのオープンソースプロジェクトはありますか?

ありがとう。

4

8 に答える 8

15

また、avr-gccツールセットのツール部分であるavr-objdump(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>ます

于 2012-06-08T02:34:39.207 に答える
13

[プラグ]IDAProはAVR分解をサポートします[/プラグ]:

IDAProAVRの分解

オープンソースに関しては、AVR GCCパッケージには、逆アセンブル機能を含むobjdumpのポートが含まれています。

于 2011-02-28T11:17:17.190 に答える
6

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

多くのプラットフォーム(AVRも)ですが、Microchip(どちらも必要ありませんでした)がありません。

大きなプラスは、それがWebベースであることです。

于 2013-08-13T06:56:23.603 に答える
5

vAVRdisasmをチェックアウトします。

于 2011-03-17T16:48:28.183 に答える
1

AVRDisassemblerは、.NET Coreで記述されたオープンソース(MIT)AVR / Arduino逆アセンブラーです(つまり、Windows、Mac、Linuxで実行できます)。逆アセンブリをstdoutに書き込む以外に、JSONダンプを発行することもできます(相互運用性、分析目的)。

免責事項:私は上記のライブラリの作者です。

于 2017-02-18T18:27:07.333 に答える
0

JohannesBauerの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スタジオでは、次の方法で実行できます。

  1. プロジェクトを実行します(デバッガーハードウェアなしでシミュレーターで実行できます)。
  2. ブレークポイントで一時停止または停止します。
  3. Ctrl + Alt+Dを押します

これは、特定のコードフラグメントが必要に応じてコンパイルされていることを確認するために役立ちます。これは、最適化によってシーケンスがスキップ/マングルされ、予期しない動作が発生する場合があるためです。

于 2016-06-14T07:29:36.353 に答える