如何从编译后的代码中得到一个c源代码

xdnvmnnf  于 2023-06-21  发布在  其他
关注(0)|答案(3)|浏览(143)

我有文本格式的编译C代码。我需要通过反编译机器码来提取源代码。如何做到这一点?

wn9m85ua

wn9m85ua1#

“真正的”反编译基本上是不可能的。最重要的是,你不能“反编译”本地名称(在函数和源代码文件/模块中)。对于这些,你会得到类似于int局部变量的结果:i1i2 ...当然,除非您也有调试信息,但这种情况并不常见。
反编译为“某物”(可能不是很可读)是可能的,但它通常依赖于一些启发式方法,识别编译器生成的代码模式,并且 * 可能 * 被愚弄生成奇怪的(甚至可能是不正确的)C代码。在实践中,这意味着反编译器通常可以在具有某些(默认)编译选项的某个编译器上工作,但在其他编译器上工作不太好。
话虽如此,反编译器确实存在,您可以试试运气,比如Snowman

mgdq6dx1

mgdq6dx12#

正如Srdjan所说,一般来说,C(或C++)程序的反编译是不可能的。在编译过程中丢失的信息太多。例如,考虑诸如int x的声明,这是“丢失”的,因为它不直接产生任何机器级指令。编译器只需要这些信息来进行类型检查。
然而现在,反汇编是可能的,它将编译后的可执行文件备份到汇编语言的一个级别。但是,大会的解释可能(将?)是困难的并且肯定是耗时的。有几个可用的反汇编程序,如果你有钱,IDA-Pro可能是反汇编程序的行业标准,如果你正在做这种类型的工作,很值得每个许可证几千美元。有很多开源的反汇编程序,google可以找到它们。
现在,有人在努力创建一个反编译器,IDA-Pro有一个,你可以看看http://boomerang.sourceforge.net/除了上面链接的雪人。
最后,其他语言对反编译比C或C++更友好。例如,C#程序可以使用dotPeekilSpy等工具进行反编译。与Java类似,有许多工具可以将Java字节码转换回Java源代码。

zpjtge22

zpjtge223#

请发布一个“文本格式的编译C代码”的示例。
也许到那时,你会更容易看到你正在努力实现的目标。
通常,将汇编语言逆向工程到C是不切实际的,因为许多以标签和变量名形式存在的人类可读信息在编译过程中永久丢失。

相关问题