反汇编器如何工作,它与反编译器有何不同?

How does a disassembler work and how is it different from a decompiler?

我正在考虑在我的 Linux Mint 17.3 OS 上安装反汇编器(或反编译器),我想知道反汇编器和反编译器之间的区别。我大概知道它们是什么(名字是不言自明的),但它们仍然有点令人困惑。

我读到反汇编程序将程序转换为汇编语言,我不知道,所以对我来说似乎没什么用。我还读到反编译器将 'binary file' 转换为源代码。什么是二进制文件?

显然,反编译器无法反编译为 C,只能反编译 Python 和其他类似的语言。那么如何将一个程序变成它原来的C源代码呢?

反汇编程序是一个非常简单的应用程序,它将 机器代码 转换为 汇编语言语句 - 这个 activity 是相反的汇编程序 程序所做的操作并且很简单,因为机器代码和汇编代码之间存在严格的一对一关系。反汇编程序针对特定的CPU。用于创建可执行文件的原始汇编程序只具有次要的相关性。

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

即使所有这些都适用,反编译器的大部分工作都是有根据的猜测,很可能永远不会达到可以 100% 以源代码形式重建原始程序的程度 - 它宁愿以可能是原始程序的源代码版本