MFC反编译为任何代码而不是汇编代码

时间:2012-04-18 19:29:00

标签: c++ assembly mfc decompiling decompiler

  

可能重复:
  Is there a C++ decompiler?
  Is there a decompiler that will work on Visual Studio 6 C++

我需要以任何方式反编译用MFC编写的exe文件,我试过IDA Pro,但它将文件转换为汇编并没有那么好,因为它有很多问号字符。 如果直接将文件转换为代码是不可能的,有没有办法将程序集转换为C ++? :(

感谢

1 个答案:

答案 0 :(得分:1)

没有。 compliation进程会破坏所有元数据,包括变量名称,优化过程使得甚至难以恢复原始源的伪代码副本。

这是一个高度简化的例子。假设你写的是“foo ++”,其中foo是一个int。根据编译器的不同,这可以编译为以下任何一种:

  • 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代码,您可以使用它来发现特定函数和例程的工作方式。