assembly - Arm64: "HINT 0x1b"和 "HINT 0x1F"的含义是什么?

标签 assembly visual-c++ arm64 instruction-set

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

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

在函数的序言中我看到:

HINT            #0x1F
RET

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

最佳答案

您的反汇编程序太旧了。

这些是指令 pacibspautibsp,是 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/

相关文章:

linux - 如何从 `func`获取 `callq func@PLT`的实际地址

汇编中的C函数调用问题

c++ - 获取我的文档的路径

macos - 为什么 hello world 在 ARM mac 'invalid' 的汇编中?

c++ - C++ vtables中的双重间接

visual-c++ - 当我尝试运行应用程序的 Debug模式时,显示 vld_x86 dll 未找到错误

visual-c++ - 除非其中包含 “.h”,否则在VS 2012中不能包含任何文件

docker - 我可以设置 arm64 docker 镜像,但无法运行任何内容

ios - LLVM ARM64 程序集 : Getting a symbol/label address?

assembly - 在 x86 NASM 或 YASM 程序集中实现选择排序的问题