6

私は MIPS アーキテクチャ用の非常に単純な逆コンパイラに取り組んでおり、進行するにつれて、コード分析のための多くのルールを定義する必要あります。bneであり、現在の前のアドレスを参照しています -ループを作成します問題 - そのようなルールがたくさんあり、それらを定義する良い方法を見つけることができません。すべてのルールに個別の関数を書き、素敵な OOP ベースロジッククラスを定義し、それらを拡張して作成しようとしましたルール、失望したコードで正規表現を試してみましたが(驚いたことに、これは予想よりもうまく機能します)、何を試しても、コードをすぐに大きくして読みにくくなりました。それ。

これは、私が間違ったツールを使用してこのタスクを解決しようとしているという結論に達します(そのような複雑なタスクにはあまりにも愚かであることは言うまでもありません:))が、何を試すべきかわかりません。現在、テストされていない 2 つのアイデアがあります。1 つはある種の DSL を使用することです (私はこれについてまったく経験がないので、完全に間違っている可能性があります)。

誰かが私を正しい方向に向けてくれることを願っています.thx.

4

1 に答える 1

2

あなたのルールのいくつかは低レベルすぎて、それが管理不能になっている理由だと思います。

lui続いて 32 ビットの一定のロードを認識することaddiuは、確かに非常に理にかなっているように思えます。しかし、個々のオペコード レベルで分岐命令から制御フローを導き出そうとするのは、かなり疑わしいようです。基本的なブロックで作業したいと思います。

Cifuentes のReverse Compilation Techniquesは、私が見た逆コンパイルの議論で繰り返し登場するリファレンスです。かなり簡単な概要から、プロジェクトの詳細を読むのに時間を費やす価値があるように思われます.

x86固有のもののいくつかは関係ありません-特に、x86を低レベルの中間表現に変換するステップは、おそらくMIPSには必要ありません(MIPSは基本的に、すでにオペコードごとに1つの基本的な操作にすぎません)-しかし、それ以外の場合は多くの非常に役立つはずです。

于 2010-07-28T22:25:52.557 に答える