assembly Arm64:“HINT 0x1b”和“HINT 0x1F”是什么意思?

8gsdolmq  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(153)

在我的C++代码的反汇编中,我看到在函数的序言中,MSVC添加了一个初始HINT指令,例如:

HINT            #0x1B
STP             X29, X30, [SP,#-0x10+var_s0]!
...
...

在函数的序言中,我看到:

HINT            #0x1F
RET

他们只是被当作一个NOP吗?但如果它是NOP,为什么它使用不同的立即?

yquaqz18

yquaqz181#

你的反汇编器太旧了。
这些是指令pacibspautibsp,是ARMv8.3指针验证功能(FEAT_PAuth)的一部分。它们分别使用“IB”密钥和sp寄存器的内容作为上下文对x30寄存器进行签名和认证。
一些PAC指令(如您正在查看的两个)是在现有NOP空间中编码的,因此程序可以以向后兼容的方式编译:如果二进制运行在兼容ARMv8.3的硬件上,则指令对x30寄存器进行签名和认证,否则这两条指令都是NOP。

相关问题