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"にチェックを入れる。 (コンパイル中のメッセージを出力させる設定を有効にする。)
次に逆アセンブルしたいソースを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
入手出来たら、下記コマンドで逆アセンブルを行い、elfファイル->asmファイルを生成する。
$ arm-none-eabi-objdump -D <hoge.elf> > <hoge.asm>
(これで全セクションの逆アセンブルが実行される)
arm-none-eabi-objdump -j .text -D <hoge.elf> > <hoge.asm>
("-j"オプションをつけてセクションを指定して逆アセンブルすることも可能)
参考リンク
GCCのリファレンス Invoking GCC (Using the GNU Compiler Collection (GCC))
objdump(逆アセンブルするときのコマンド)のリファレンス https://linux.die.net/man/1/objdump