c++ - MFC反编译为任何非汇编代码

标签 c++ assembly mfc decompiling decompiler

<分区>

Possible Duplicate:
Is there a C++ decompiler?
Is there a decompiler that will work on Visual Studio 6 C++

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

谢谢

最佳答案

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

这是一个高度简化的示例。假设您编写“foo++”,其中 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 代码,您可以使用这些代码来发现特定函数和例程的工作原理。

关于c++ - MFC反编译为任何非汇编代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10216559/

相关文章:

c++ - 从未知数量的文件中存储数据

optimization - ARM NEON : How to implement a 256bytes Look Up table

assembly - 引导加载程序如何读取 DVD(cd)?

visual-c++ - MFC 的 GetClientRect 和 MoveWindow 不保留大小?

c++ - 调用 LoadFrame() 时断言失败 MFC、RIBBON、VS2008、C++

c++ - 在磁盘上实现无锁数据结构

c++ - 在派生类中使用私有(private)抽象方法

c++ - 将 C++ 项目与 visual studio 中的表单项目链接起来

assembly - 为什么间接寻址中的索引器必须是双字?

c++ - 为什么在 mfc 的 listcontrol 中插入的文本显示截断文本? listcontrol 是重新调整大小?