为什么在x86汇编中将NOP分配给0x90?

问题描述 投票:3回答:1

为什么nop被分配到intel x86汇编的0x90

直觉上我会期望0x00将映射到nop(在intel x86上也是xchg eax, eax),就像ARM A32和其他一些架构一样。

assembly x86 opcode machine-code nop
1个回答
6
投票

0x00000000实际上不是ARM A32上的NOP,尽管它表现得像一个;它实际上是andeq r0, r0, r0而真正的NOP是0xe1a00000(mov r0,r0)。将NUL字节设为NOP是一个相当糟糕的主意,因为这会使每个空的内存区域成为免费的NOP幻灯片,从而大大增加了攻击的风险。现代架构通常试图使所有零都是中断指令或类似的以避免这种攻击向量。例如,ARM A64使0x00000000成为永久未定义的指令udf 0

0x90实际上只是0x90 + r操作码系列的一个指令,代表xchg r32, eaxeax是0,所以0x90代表xchg eax, eax,这是一个NOP。在长模式下,0x90是特殊的,它不会将高32位的rax归零,以保持其单字节NOP的功能。

© www.soinside.com 2019 - 2024. All rights reserved.