AMD64 编译器优化与寄存器操作

逆向工程 拆卸 amd64
2021-06-24 06:53:21

AMD64(又名 x86-64 或 x64)寄存器可以一次访问 8、16、32 或 64 位。阅读反汇编列表时,哪些寄存器操作不简单?

例如,当一条指令访问寄存器的一部分时,它如何影响其他部分?

优化器使用的哪些典型指令或指令序列可能会编码一些不明显的东西(例如,将寄存器与自身异或以将其设置为零)?

1个回答

并不是真正的优化,但是当来自 x86 时,您必须注意的一个问题是:

对 32 位寄存器的任何操作都会将 64 位寄存器的上半部分清零

例如,以下内容:

mov eax, 3

实际上相当于:

mov rax, 3

这也适用于新寄存器r8- r15,例如:

inc r8d

也将 的上半部分归零r8

但是,寄存器的 8 位和 16 位部分不是这样工作的,即对它们的操作仅修改寄存器的那部分。