有 C++ 反编译器吗? [关闭]

Posted

技术标签:

【中文标题】有 C++ 反编译器吗? [关闭]【英文标题】:Is there a C++ decompiler? [closed] 【发布时间】:2010-09-17 07:56:49 【问题描述】:

我有一个程序丢失了 C++ 源代码。有没有好的 C++ 反编译器?

我已经遇到过Boomerang。

【问题讨论】:

objdump for Linux cutter.re 用于出色的 gui 和出色的内置反编译器 【参考方案1】:

您可以通过Hex-Rays 使用IDA Pro。除非您在调试信息中进行编译,否则您通常不会从二进制文件中获得好的 C++。准备花费 大量 体力劳动来反转代码。

如果您没有剥离二进制文件,那么 IDA Pro 可以生成与 C 类似的代码供您使用,这是有希望的。但通常它非常粗糙,至少在我几年前使用它的时候。

【讨论】:

澄清一下,IDA只会给出反汇编。它有一个名为 Hex-Rays 的附加组件,可以在可能的范围内将其余部分反编译为 C/C++ 源代码。 在我阅读文档时,hex-rays 只输出 C 类的伪代码。并不是说它对反编译 C++ 毫无用处,您只需要了解一下编译器如何转换 C++ 结构即可。 澄清一些,反汇编是你可以用 Hex-Rays 反编译的最多的东西,它将把 ASM 翻译成 C++ ASM 可以翻译成任何编程语言,因为所有程序都可以作为 ASM 运行 SNOWMAN 是一款不错的免费 c++ 反编译器 +1 表示雪人,但正如其他人所提到的,即使是简单的 Hello, World 在反编译后实际上也变得不可读。【参考方案2】:

是的,但它们都无法生成足够可读的代码来值得付出努力。与从头重写旧应用程序相比,您将花费更多时间尝试读取包含汇编程序块的反编译源代码。

【讨论】:

【参考方案3】:

信息在编译过程中被丢弃。即使反编译器可以生成具有类和所有内容的逻辑等效代码(它可能不能),自记录部分在优化的发布代码中消失了。没有变量名,没有例程名,没有类名——只有地址。

【讨论】:

程序的“灵魂”消失了,只是原来的一个空壳……”【参考方案4】:

根据原始代码的大小和编写程度,可能值得用您最喜欢的语言(可能仍然是 C++)重新开始,并从上一个版本中犯的任何错误中吸取教训。不是有人说过要写一个扔掉吗?

n.b.显然,如果这是一个巨大的产品,那么它可能不值得花时间。

【讨论】:

joelonsoftware.com/articles/fog0000000069.html 乔尔是一位出色的专栏作家,但有时是错误的。然后有时他的引用是错误的。就像这里一样,因为问题集中在源代码的丢失上。 Joels 的文章解释了为什么源代码很有价值。 不是有人说过要写一个扔掉吗? 是的,他改变了主意davewsmith.com/blog/2010/***-revisits-plan-to-throw-one-away [I]n 1975,我建议程序员“扔掉第一个版本”,然后构建第二个版本。到 20 周年纪念版时,我意识到不断增量迭代是一种更合理的方法【参考方案5】:

我还没有看到任何生成 C++ 代码的反编译器。我见过一些实验性的,它们在生成 C 代码方面做出了合理的尝试,但它们往往依赖于匹配特定编译器的代码生成模式(这可能已经改变,自从我上次研究这个已经有一段时间了)。当然,任何符号信息都会消失。谷歌“反编译器”。

【讨论】:

以上是关于有 C++ 反编译器吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

java反编译

C++生成的DLL用啥工具反编译

dll文件如何反汇编成源码,C++语言编写

你如何反编译一个swf文件[关闭]

Visual C++反编译

如何反编译整个Jar文件? [关闭]