gpt4 book ai didi

assembly - 为什么在 x86 程序集中将 NOP 分配给 0x90?

转载 作者:行者123 更新时间:2023-12-04 23:12:14 26 4
gpt4 key购买 nike

为什么是 nop分配给 0x90在英特尔 x86 组件上?

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

最佳答案

0x00000000 实际上不是 ARM A32 上的 NOP,尽管它表现得像一个;它实际上是 andeq r0, r0, r0而真正的 NOP 是 0xe1a00000 (移动 r0,r0)。将 NUL 字节设为 NOP 是一个相当糟糕的主意,因为这会使每个空的内存区域成为一个空闲的 NOP 幻灯片,从而大大增加了受到攻击的风险。现代体系结构通常尝试使所有零成为中断指令或类似指令,以避免这种攻击向量。例如,ARM A64 使 0x00000000永久未定义的指令 udf 0 .
0x90实际上只是 0x90 + r 的一条指令代表 xchg r32, eax 的操作码系列. eax是寄存器 0,所以 0x90代表 xchg eax, eax这是一个 NOP。在长模式下,0x90特殊情况下不将 rax 的高 32 位清零保持其作为单字节 NOP 的功能。

关于assembly - 为什么在 x86 程序集中将 NOP 分配给 0x90?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55941924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com