反汇编程序如何工作以及它与反编译器有何不同?

时间:2016-10-01 16:57:35

标签: cpu-architecture decompiler disassembly

我正在研究在我的Linux Mint 17.3操作系统上安装反汇编程序(或反编译程序),我想知道反汇编程序和反编译程序之间的区别。我粗略地了解它们是什么(名称相当不言自明),但它们仍然有点令人困惑。

我读过一个反汇编程序将程序变成汇编语言,我不知道,所以对我来说似乎没用。我还读到反编译器将“二进制文件”转换为其源代码。究竟什么是二进制文件?

显然,反编译器无法反编译为C,只能使用Python和其他类似语言。那么如何将程序转换为原始的C源代码呢?

1 个答案:

答案 0 :(得分:5)

反汇编程序是一个非常简单的应用程序,它将机器代码传输到汇编语言语句 - 此活动是汇编程序程序的反向操作并且直截了当,因为机器代码和汇编之间存在严格的一对一关系。反汇编程序针对特定的CPU。用于创建可执行文件的原始汇编程序仅具有较小的相关性。

反编译器旨在将已编译的高级语言程序从机器代码重新创建为其原始格式 - 从而尝试反向操作C或Forth(存在反编译器的流行语言)编译器。因为有很多高级语言,因此有很多方法可以在机器代码中表达原始的高级语言结构(即使在相同的语言和构造中,甚至在相同的编译器中,甚至很多不同的策略,甚至不同的策略取决于编译器模式和情况),这个操作要复杂得多,并且非常依赖于原始编译器(甚至可能是使用的命令行,它选择的优化级别以及使用的版本)。

即使一切都适合,反编译器的大多数工作都是受过教育的猜测,并且很可能永远不会达到能够在其源代码形式中100%重建原始程序的程度 - 它最终会以< em>可能是原始程序的源代码版本。