0

重複の可能性:
C++ 逆コンパイラはありますか?
Visual Studio 6 C++ で動作する逆コンパイラはありますか?

MFCで書かれたexeファイルを逆コンパイルする方法が必要です.IDA Proを試しましたが、ファイルをアセンブリに変換しましたが、疑問符がたくさんあるのでうまくいきませんでした。ファイルからコードへの直接変換が不可能な場合、アセンブリを C++ に変換する方法はありますか? :(

ありがとう

4

1 に答える 1

1

いいえ。コンパイル プロセスでは、変数名を含むすべてのメタデータが破棄されます。また、最適化プロセスでは、元のソースの疑似コード レプリカでさえも復元が困難になります。

これは非常に単純化された例です。foo が int である "foo++" と書いたとしましょう。コンパイラによっては、これは次のいずれかにコンパイルできます。

  • inc dword ptr [esp+12h]- foo はローカルとしてスタックに保持されます
  • inc dword ptr [00000f00h]- foo はヒープ変数です
  • add dword ptr [00000f00h], 1- インクリメントする別の方法
  • mov eax, dword ptr [esp+12h]; inc eax- スタックから eax に移動し、インクリメントします
  • 等...

可能性は事実上無限です。

最善の策は、Hex-Rays Decompiler のようなものを調べることですが、安くはありません。IDA と連携して疑似 C コードを生成します。これを使用して、特定の関数やルーチンがどのように機能するかを調べることができます。

于 2012-04-18T19:33:06.463 に答える