NOP指令

逆向工程 部件 x86
2021-07-02 08:17:26

我最近了解到,nop指令实际上是xchg eax, eax……它所做的基本上是eax与自身进行交流

就 CPU 而言,交换真的发生了吗?

2个回答

有几个指令,可以根据编译器使用。xchg eax, eax是字节码90,是一条合法的指令,占用一个处理周期。此外,还有其他几个指令可以用来代替xchg eax, eax

lea eax, [eax + 0x00]    byte code 8D 40 00
mov eax, eax             byte code 89 C0

由于所有这些指令的长度不同,编译器会根据对齐要求选择最合适的版本之一。

关于编译器的选择,一些提示:

简短的回答是“是的”。事实上,如果您通过直接生成机器语言操作码进行试验,您会发现有一整套有效的 NOP 操作,所有这些操作都需要一个处理器周期来执行。

虽然它们在技术上没有“文档化”,但您会发现非常接近 0x90,

  • XCHG EAX, EAX
  • XCHG EBX, EBX
  • XCHG ECX, ECX
  • XCHG EDX, EDX