在我的C++代码的反汇编中,我看到在函数的序言中,MSVC添加了一个初始HINT指令,例如:
HINT #0x1B STP X29, X30, [SP,#-0x10+var_s0]! ... ...
在函数的序言中,我看到:
HINT #0x1F RET
他们只是被当作一个NOP吗?但如果它是NOP,为什么它使用不同的立即?
yquaqz181#
你的反汇编器太旧了。这些是指令pacibsp和autibsp,是ARMv8.3指针验证功能(FEAT_PAuth)的一部分。它们分别使用“IB”密钥和sp寄存器的内容作为上下文对x30寄存器进行签名和认证。一些PAC指令(如您正在查看的两个)是在现有NOP空间中编码的,因此程序可以以向后兼容的方式编译:如果二进制运行在兼容ARMv8.3的硬件上,则指令对x30寄存器进行签名和认证,否则这两条指令都是NOP。
pacibsp
autibsp
FEAT_PAuth
sp
x30
1条答案
按热度按时间yquaqz181#
你的反汇编器太旧了。
这些是指令
pacibsp
和autibsp
,是ARMv8.3指针验证功能(FEAT_PAuth
)的一部分。它们分别使用“IB”密钥和sp
寄存器的内容作为上下文对x30
寄存器进行签名和认证。一些PAC指令(如您正在查看的两个)是在现有NOP空间中编码的,因此程序可以以向后兼容的方式编译:如果二进制运行在兼容ARMv8.3的硬件上,则指令对
x30
寄存器进行签名和认证,否则这两条指令都是NOP。