|
|
|
RISC-V ツールチェインを使ったデバッグ
|
|
|
|
========
|
|
|
|
|
|
|
|
## prog.elfを逆アセンブルする
|
|
|
|
|
|
|
|
命令列はバイナリデータであり、人間が読むことは非常に困難です。人間が読めるようなアセンブリ言語に変換することを逆アセンブルと言います(アセンブリ言語を機械語に変換することをアセンブルと言いますが、その逆の動作なので逆アセンブルです)。また、そのような仕事をするプログラムのことを、逆アセンブラと呼びます。`objdump`というコマンドは逆アセンブラの機能を備えています。
|
|
|
|
|
|
|
|
Ubuntuにはもともとから`objdump`というコマンドが入っていると思いますが、これはx86の機械語用です。今回は、RISC-Vの機械語を逆アセンブルしたいので、インストールしたものを使います。
|
|
|
|
|
|
|
|
```
|
|
|
|
~/opt/riscv/bin/riscv32-unknown-elf-objdump -d -Mno-alias,numeric prog.elf > prog.disasm
|
|
|
|
```
|
|
|
|
|
|
|
|
ここで、`-d`オプションは「逆アセンブルを出力せよ」、`-Mno-alias,numeric`オプションは「疑似命令を使うな、レジスタ名は番号をそのまま出力せよ(ABI名を使うな)」の意味です。 |