0

可能重复:
是否有 C++ 反编译器?
是否有适用于 Visual Studio 6 C++ 的反编译器

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

谢谢

4

1 回答 1

1

不会。编译过程会破坏所有元数据,包括变量名,而优化过程使得即使是原始源的伪代码副本也难以恢复。

这是一个高度简化的示例。假设您编写“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,然后递增
  • ETC...

可能性几乎是无穷无尽的。

最好的办法是研究 Hex-Rays Decompiler 之类的东西,尽管它并不便宜。它与 IDA 一起生成伪 C 代码,您可以使用它来发现特定函数和例程的工作方式。

于 2012-04-18T19:33:06.463 回答