x86 反汇编/简介
这本书介绍了如何将 x86 机器码反汇编成人类可读的汇编语言,以及如何将 x86 汇编代码反编译成人类可读的 C 或 C++ 源代码。有些主题适用于所有计算机体系结构,不仅仅是 x86 兼容机器。
这本书将深入探讨 x86 机器码和汇编代码的反汇编和反编译。我们将研究使用汇编器和编译器制作程序的方式,并检查从 C 或 C++ 源代码生成汇编代码的方式。利用这些知识,我们将尝试逆转这个过程。通过检查常见结构(如数据和控制结构),我们可以找到有助于我们快速反汇编和反编译程序的模式。
这本书适合拥有 x86 汇编和 C 或 C++ 编程经验的本科生读者。这本书并非旨在教授汇编语言编程、C 或 C++ 编程或编译器/汇编器理论。
读者应该对x86 汇编、C 编程以及可能C++ 编程有透彻的理解。这本书旨在加深读者对 x86 机器码、x86 汇编语言和 C 编程语言之间关系的理解。如果您不太熟悉这些主题,您可能需要在继续学习之前重新阅读上面提到的书籍。
计算机程序最初是用人类可读的代码形式编写的,例如汇编语言或高级语言。然后,这些程序被编译成一种称为机器码的二进制格式。这种二进制格式对人类来说是不可读或不可理解的。许多程序(例如恶意软件、专有商业程序或非常老旧的遗留程序)可能没有可供您使用的源代码。
程序经常执行需要重复的任务,或者需要与其他程序交互。如果没有源代码和足够的文档,这些任务可能难以完成。本书概述了尝试将可执行文件的原始机器码转换为等效的汇编语言代码和高级语言 C 和 C++ 代码的工具和技术。有了用于执行特定任务的高级代码,以下几件事就成为可能
- 程序可以通过在不同的环境中编译源代码移植到新的计算机平台。
- 可以确定程序使用的算法。这允许其他程序使用相同的算法,或者更新版本的程序可以在无需跟踪旧源代码副本的情况下重写。
- 用户可以识别和修补安全漏洞,而无需访问原始源代码。
- 可以为旧程序实现新的接口。可以在旧组件之上构建新组件,以加快开发时间并减少重写大量代码的需要。
- 我们可以弄清楚一段恶意软件的作用。我们希望这能让我们找到阻止其有害影响的方法。不幸的是,一些恶意软件编写者使用自修改代码技术(多态伪装、异或加密、混淆)[1],显然是为了让即使检测恶意软件也很困难,更不用说反汇编了。
反汇编代码有很多实际应用。它的一个积极的副作用是,读者将更好地理解机器码、汇编语言和高级语言之间的关系。对这些主题的良好了解将帮助程序员生成更高效、更安全的代码。