2011/12/04

[電子工作]AVRの逆アセンブラ、avr-objdump.exeを使う

,
 AVRの逆アセンブラ、avr-objdumpの話です。

 WinAVRでプログラムを書いていて、「どうしてこんなメモリを喰うんだろう?」と思う時がありました。Cのコードを少し変えただけなのに、です。こんな時は、コンパイル結果である機械語のコードが全く違っていたりするので、確認のためにアセンブリのソースも見ないといけません。となると、逆アセンブラの出番になります。

 …前置きが長いですが、AVRの逆アセンブラ、「avr-objdump.exe」についてのメモです。
 この実行ファイルのオプションを知るには、avr-objdump.exeのmanを見て頂くのが早いです。一応、コマンドラインでただavr-objdumpと入力しても、オプション一覧が出ると思います。下にオプション一覧の画面を貼ってきます。

avr-objdump.exeのオプション一覧

 逆アセンブラを吐き出すためには、一旦C/C++で作成したプロジェクトをMake Allし、できたファイルのうちのオブジェクトファイル(拡張子は.o、大抵main.oとか)が必要です。コマンドラインで、avr-objdump -S main.o とすれば、逆アセンブラのリストがずらーっと並びます。テキストファイルなどにしたい場合は、avr-objdump -S main.o > dump.txtなどとすれば、そのディレクトリの中にdump.txtが作成され、以下のように逆アセンブラが出力されます。

逆アセンブラした結果(サクラエディタで閲覧)

 ちなみに私の場合、_delay_ms()がメモリを消費していたみたいです。直接の原因かは分かりませんが、公式には「The maximal possible delay is 262.14 ms / F_CPU in MHz.」と書かれているので、あまり大きな引数(400とか)にするのは考えものですね… 

0 コメント to “[電子工作]AVRの逆アセンブラ、avr-objdump.exeを使う”

コメントを投稿