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


116

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

我已经遇到过回旋镖


objdump对于Linux
Stypox

1
伟大的图形用户界面和强大的内置反编译器的
cutter.re

Answers:


80

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

如果您不剥离二进制文件,那么IDA Pro可以产生类似C的代码供您使用,因此您会充满希望。但是,通常它非常粗糙,至少在几年前使用时。


26
为了澄清起见,IDA仅会进行拆卸。它有一个名为Hex-Rays的附加程序,它将在可能的情况下将其余方式反编译为C / C ++源代码。
davenpcj 2012年

2
就我阅读文档而言,十六进制射线仅输出C(如伪代码)。并不是说它对反编译C ++毫无用处,您只需要稍微了解一下编译器如何转换C ++结构即可。
Michael Anderson

为了进一步说明,反汇编是您最多可以使用Hex-Rays进行反编译的方法,它将ASM转换为C ++,因为所有程序都可以作为ASM运行,所以可以将ASM转换为任何编程语言
Barkermn01 2014年

4
SNOWMAN是一个很好的免费c ++反编译器
Inga,2018年

2
雪人+1,但正如其他人所提到的,即使是简单的Hello,World一旦被反编译也几乎变得不可读。
bdetweiler '18

25

信息在编译过程中被丢弃。即使反编译器可以生成包含类和所有内容的逻辑等效代码(可能无法生成),但自记录部分仍包含在优化的发行代码中。没有变量名,没有例程名,没有类名-仅地址。


25
该程序的“灵魂”消失了,只是它以前的自我的一个空壳……”
Darshan Chaudhary

21

是的,但是没有一个能够产生足够可读的代码,值得付出努力。与从头开始重写旧应用程序相比,您将花费更多的时间来尝试读取内部带有汇编器块的反编译源代码。


6

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


4

根据原始代码的大小和编写的好坏,可能有必要从您喜欢的语言(可能仍然是C ++)重新开始,并从上一版本中的任何错误中学习。有人不是曾经说过要写一个扔掉吗?

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



24
乔尔是一位出色的专栏作家,但有时错了。然后有时候他被引用错了。像这里一样,因为问题集中在源代码的丢失上。Joels的文章解释了为什么源代码很有价值。
MSalters

5
有人不是曾经说过要写一个扔掉吗?是的,他改变了主意davewsmith.com/blog/2010/brook-revisits-plan-throw-one-away [1975年],我劝告程序员“扔掉第一个版本,然后再建一个”之一。到20周年纪念版,我意识到恒定增量迭代是一种
更为合理的
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.