就我的理解水平而言,32 位和 64 位反汇编器之间的唯一区别是 32 位反汇编器生成的汇编代码仅使用 32 位汇编指令,而 64 位反汇编器也使用 64位指令和寄存器。
我的问题是,使用 64 位反汇编器比使用 32 位反汇编器有什么优势?
此外,如果我想反汇编为 64 位机器编译的程序,我可以使用像 OllyDBG 这样的 32 位反汇编器吗?输出与像 x64dbg 这样的 64 位反汇编器有何不同?
就我的理解水平而言,32 位和 64 位反汇编器之间的唯一区别是 32 位反汇编器生成的汇编代码仅使用 32 位汇编指令,而 64 位反汇编器也使用 64位指令和寄存器。
我的问题是,使用 64 位反汇编器比使用 32 位反汇编器有什么优势?
此外,如果我想反汇编为 64 位机器编译的程序,我可以使用像 OllyDBG 这样的 32 位反汇编器吗?输出与像 x64dbg 这样的 64 位反汇编器有何不同?
“32 位反汇编器”和“64 位反汇编器”没有固定定义。这些术语实际上是模棱两可的。
32 位和 64 位仅指 CPU 架构。特别是诸如寄存器大小和总线大小之类的东西。这些可以适用于很多事情。
具体来说,在反汇编程序的情况下,它们可以应用于两件事:
此外,还有多个 CPU 系列有 32 位和 64 位两种版本。今天最相关的是英特尔和 AMD,以及 ARM。
这些都是独立的。您可以编译一个反汇编程序以在 32 位 Intel 机器上运行,该程序能够反汇编应该在 64 位 ARM 处理器上运行的二进制文件。
现在在同一个 CPU 中,64 位架构可能是也可能不是之前 32 位架构的扩展。英特尔就是这种情况。
因此,32 位二进制文件通常可以在 32 位机器或 64 位机器上运行,但 64 位二进制文件只能在 64 位机器上运行,因为它会使用指令、寄存器、寻址方式等比32位机不支持。
同样,如果您尝试使用专为反汇编同一 CPU 系列的 32 位二进制文件而设计的反汇编程序来反汇编 64 位二进制文件,它将只能识别 32 位指令、寄存器、寻址模式等。所有的64 位特定的东西只会混淆反汇编器。
我对 OllyDBG 或 x64dbg 都不熟悉,所以我不知道它们的功能。
您似乎认为“32 位反汇编器”会以某种方式将 64 位代码转换或翻译成 32 位代码。这是不可能的。那将属于交叉编译和仿真领域。
32 和 64 的不同之处比你想象的要多。您有几乎相同的二进制代码,但在 64 位上,您对 64 位寄存器和 64 位数据进行操作。32 和 64 是关于数据而不是代码。在 64 位代码上使用 OllyDBG 没问题,但是: