在我的 C++ 代码的反汇编中,我看到在函数的序言中,MSVC 添加了一个初始 HINT 指令,例如:
HINT #0x1B
STP X29, X30, [SP,#-0x10+var_s0]!
...
...
在函数的序言中我看到:
HINT #0x1F
RET
他们只是被视为 NOP 吗?但如果它是一个 NOP,为什么它使用不同的立即数?
最佳答案
您的反汇编程序太旧了。
这些是指令 pacibsp
和 autibsp
,是 ARMv8.3 指针身份验证功能 (FEAT_PAuth
) 的一部分。他们分别使用“IB” key 对 x30
寄存器进行签名和身份验证,并使用 sp
寄存器的内容作为上下文。
一些 PAC 指令(如您正在查看的两条指令)在现有 NOP 空间中进行编码,以便可以以向后兼容的方式编译程序:如果二进制文件在兼容 ARMv8.3 的硬件上运行,则指令对x30
寄存器进行签名和验证,否则两条指令都是NOP。
关于assembly - Arm64: "HINT 0x1b"和 "HINT 0x1F"的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76531601/