四畳半テクノポリス

コロナのストレスで気が狂い、D進した院生

Risc-Vの逆アセンブラ

Day2:Risc-Vの逆アセンブラ

ビッグエンディアン トルエンディアン

命令コード:

 

使い方

  1. フォームに32bit(16進数で8桁)の命令を入力します。
  2. Disassembleボタンを押します。
  3. 枠内にニモニックが表示されます。

なぜ逆アセンブラを作ったのか

最初はRisc-Vの命令表を作ろうと記事を書いていたのですが、東大の方がすでに良いものを公開してらっしゃったのと、書いている途中で消失し、やる気をなくしたのでやめました。そして前回の記事で作成した環境でバイナリの解析を行っていたところ、Risc-Vには疑似命令というものが存在し(別にPICにだってある)、命令とアセンブラが直交しないことがわかりました。コレはちょっと面倒くさいです。そこで逆アセンブラの開発を行い、結果としてRV32Iの命令を逆アセンブル出来るものが完成しました。逆アセンブル部分は完成したのですが、ELFヘッダとかがgccのバイナリにはついてるので、なんだか面倒臭くなっちゃってファイルを読み込んで逆アセンブルする機能は作らずにこんな中途半端な1命令逆アセンブラが完成しました。

アセンブラの開発を行ったもう一つ狙いとしてはエミュレータの命令デコーダと逆アセンブラ構造が大体一緒なので、逆アセンブラを改造したらエミュレータが出来るんじゃね?っという狙いがあります。今回のプロジェクトの最大の目標はFPGAへの実装ですから、エミュレータの開発はほぼ必須なので逆アセンブラ作ったのは悪くなかったと思います。でもさ、Twitter見てるとエミュ書かずに直接FC互換機と書いちゃう化物がいて怖いよね。

失敗したこと

アセンブラを作った当初は「逆アセンブラアセンブラは真逆の動きをするだけだから逆アセンブラ用のswitch文ツリーをそのままアセンブラに流用できんじゃね?」とかアホなことを考えていたのですが、アセンブラでは疑似命令が登場するのでちょっとむずかしいですね。はい

「お前進捗おくれてんじゃねぇか」

ごめんなさい自動車免許の合宿に行ってました。僕は高専技科大学の純粋培養ちゃんなので世の中色んな人が居るんだなと思いました。