131

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

我已经遇到了Boomerang

4

5 回答 5

93

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

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

于 2008-10-15T15:08:12.500 回答
27

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

于 2008-10-15T15:15:32.220 回答
21

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

于 2008-10-15T15:12:35.130 回答
6

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

于 2008-10-15T17:47:59.387 回答
4

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

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

于 2008-10-15T15:16:21.907 回答