命令をマシンフレンドリーな構造でコンポーネントパーツに分解するARM(またはその他の非x86)逆アセンブラはありますか?理想的には、 XED または distorm3 のようなもので、構造に分解してから提供します。 「これは呼び出しですか?」などのクエリを実行するためのAPI。 「これは条件分岐ですか?」など、または命令のオペランドを取得します。
armstorm を見つけましたが、現在はTHUMBのみをサポートしています。
編集:明確にするために、私は別のプログラム内から呼び出すことができ、できればリベラルなライセンス(GPL互換)を持っているものを探しています。
コメント
- 価値があるのは、おそらく近いうちにERESIに追加されるものだと思います。彼らはすでにIntelとSparcにそれを持っており、ARMサポートをさらに追加しています。
回答
DARM (GitHub)by Jurriaan Bremerは、ARMv7逆アセンブラです。 Cであり、3条項BSDライセンスの下で利用可能です。
注:現在、Thumbモードはサポートされていません。
DARMの簡単な使用例は次のとおりです。
// The structure which will hold all the metadata about the disassembled instruction... darm_t d; // disassemble a 32bit opcode... if( darm_armv7_disasm( &d, 0xE12FFF14 ) >= 0 ) { if( d.instr == I_BX ) { // do something with a BX instructiuon... } // print the disassembled full instruction darm_str_t str; if( darm_str( &d, &str) > 0 ) printf( "%s\n", str.instr ); }
コメント
- これは私が目指していたもののようです!両方のDARMを使用することもできると思いますとアームストーム完全なサポートを受けるには…
回答
はい、 IDAProのSDK を使用すると、 insn_tクラス(ua.hpp内)を介して「命令」コンポーネントパーツにアクセスできます。
コメント
- その'知っておくと便利ですが、私は'別のプログラム内から呼び出すことができ、できればリベラルなライセンスを持っているものを探しています。
- @ BrendanDolan-Gavitt:おそらく、質問の中でそれを述べるのは良い考えですか?
回答
この質問に対する最新の回答は、 Capstone ライブラリ。私はこれをARMの分解に使用しましたが、非常に信頼性があります。 IMHO、これは利用可能な最高のオープンソースライブラリです。
このライブラリは、LLVMのTabelGen命令の説明に基づいています。したがって、そのISAサポートはLLVMと同じくらい完全です。