構造化された出力を提供するARM逆アセンブラはありますか?

命令をマシンフレンドリーな構造でコンポーネントパーツに分解する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と同じくらい完全です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です