【发布时间】:2013-01-16 08:15:54
【问题描述】:
我正在阅读Reversing:逆向工程的秘密这本书,在第二章中,作者说:
如果您打算学习倒车和 汇编语言并且没有考虑特定的平台,请使用 IA-32。
这本书写于 2005 年,所以我想知道这是否仍然相关?如果我没有逆向工程、汇编程序等方面的经验,我应该选择 IA-32 吗?
【问题讨论】:
标签: architecture reverse-engineering
我正在阅读Reversing:逆向工程的秘密这本书,在第二章中,作者说:
如果您打算学习倒车和 汇编语言并且没有考虑特定的平台,请使用 IA-32。
这本书写于 2005 年,所以我想知道这是否仍然相关?如果我没有逆向工程、汇编程序等方面的经验,我应该选择 IA-32 吗?
【问题讨论】:
标签: architecture reverse-engineering
就应用程序而言,IA-32 仍然是 Windows 最常用的架构,但有些应用程序使用 AMD64。我想这一切都取决于你试图逆向工程是什么。
【讨论】:
我认识的大多数优秀的逆向工程师都是从 windows IA-32 程序集开始的,因为 windows 可执行文件(尤其是恶意软件)大多是封闭源代码。您会在具有 IA-32 架构的 Windows 中找到很多二进制文件来练习。之后,您可以切换到另一种架构,例如 AT&T。当您已经熟悉 IA-32 时,只需稍作调整即可适应其他架构。
【讨论】:
实际上,对于现实世界的逆向工程,人们仍然会在未来几年开始使用 x86/IA-32 组装。显然,我们最近看到了 x64/AMD64 的接管,但这些 CPU 能够完全原生地运行 x86 代码(系统调用和 OS API 确实需要像 WoW64 这样的模拟器的帮助)。至关重要的是,x64 指令集的 x86 子集包括初学者无论如何都想首先了解的基本指令。
当然,在逆向工程中,有一个不同的、更引人注目的动机来关注 IA-32 代码,特别是原生 x86 程序的大量可用性。从纯粹的倒转的角度来看,如果您打算为 x64 CPU 开发程序,您真的只需要了解任何关于 x64 CPU 的信息。
正如我已经暗示的那样,这些差异远不足以使 x86 知识变得毫无价值。架构方面有一些变化(例如,RAX 之类的扩展寄存器以及您可以使用它们的东西的变化)和指令集方面的一些变化(例如,您的一些常见指令将需要 64 位寄存器操作数)但是相同之处远多于不同之处。
还有其他平台,例如 ARM,您的问题也会一直在讨论,但这些在您感兴趣的设备中并不普遍。默认情况下学习 x86 汇编的建议很好一个。
【讨论】: