0と1の反復横跳び

仕事や趣味のメモ。コンピュータ、旅、音楽、本など

Arduino IDEのelfファイルから逆アセンブルでasmファイルを生成させる(arm編)

Arduino IDEに中間ファイル(.elf)を出力させ、逆アセンブルによってasmファイル(アセンブリファイル)を入手する方法。 (Arduino IDE version: 2.3.3、Windows + WSLで確認済。)

ここではArduino UNO R4 minima(wifi)やRP2350の、所謂(Cortex-M)ARMプロセッサを想定する。 (未確認だが、基本的な作業はAVRやRISC-Vでも変わらないはずなので、対応したクロスコンパイラが入手できればアセンブリは生成できるはず。)

Arduino IDEの設定と操作

Arduino IDEを開き、File -> Preferences -> Show verbose output duringの"compile"にチェックを入れる。

Show verbose output duringの設定
コンパイル中のメッセージを出力させる設定を有効にする。)

次に逆アセンブルしたいソースをverify(コンパイル)する。

verify完了後、Outputに表示される下記のパスをコピーし、txtなどに張り付ける。

コピーするパス

この時、"-A"以降のフルパスが".elf"を示しているため、エクスプローラーでアクセスし、ファイルが存在していることを確認。

(メモ: このelfファイルが何者かというと、≒機械語。コンピュータは書いたプログラム(Cなど)をそのまま実行してくれるわけではなく、コンパイルを行うことで各プロセッサアーキテクチャに合ったバイナリ(binファイル)を生成しそれを実行する。が、linuxなどOSが動いているコンピュータでは都合が悪いので、実行しやすい形式に直した機械語ファイル=elfという理解。)

WSLで 逆アセンブル

*注: WSLはインストール済の前提。

生成したelfファイルをwsl環境にコピーする。場所はhome下などにディレクトリを作る。 (Windowsからコピーする場合は、エクスプローラーで " \wsl$" とパスを検索するとWSLのディスクが覗ける。)

次に

$ sudo apt install binutils-arm-none-eabi

でARM用gcc(クロスコンパイラ)を入手する。

入手出来たら、下記コマンドで逆アセンブルを行い、elfファイル->asmファイルを生成する。

$ arm-none-eabi-objdump -D <hoge.elf> > <hoge.asm>

(これで全セクションの逆アセンブルが実行される)

arm-none-eabi-objdump -j .text -D <hoge.elf> > <hoge.asm>

("-j"オプションをつけてセクションを指定して逆アセンブルすることも可能)

参考リンク