簡體   English   中英

為什么在x86匯編中將NOP分配給0x90?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM