![](/img/trans.png)
[英]What does “rep; nop;” mean in x86 assembly? Is it the same as the “pause” instruction?
[英]Why was NOP assigned to 0x90 in x86 assembly?
為什么在Intel x86 Assembly上將nop
分配給0x90
?
憑直覺,我希望0x00
會映射到nop
(這也是xchg eax, eax
intel x86處的xchg eax, eax
),就像ARM A32
和其他一些體系結構一樣。
0x00000000實際上在ARM A32上不是NOP,盡管其行為類似於1。 實際上是andeq r0, r0, r0
而實際的NOP是0xe1a00000
(mov r0,r0)。 將NUL字節設置為NOP是一個相當糟糕的主意,因為這會使每個空內存區域成為空閑的NOP幻燈片,從而大大增加了遭受攻擊的風險。 現代架構通常會嘗試使所有零成為中斷指令或類似指令,以避免這種攻擊向量。 例如,ARM A64使0x00000000
成為永久未定義的指令udf 0
。
0x90
實際上只是0x90 + r
操作碼系列的一個指令,它代表xchg r32, eax
。 eax
是寄存器0,因此0x90
代表xchg eax, eax
即NOP的xchg eax, eax
。 在長模式下,特殊情況下使用0x90
不能將rax
的高32位清零以保持其作為單字節NOP的功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.