Performance 为什么在arm64 ABI中不使用SVC的立即值?
在aarch32中,更准确地说是ARM-OABI,仍然使用Performance 为什么在arm64 ABI中不使用SVC的立即值?,performance,optimization,arm,arm64,abi,Performance,Optimization,Arm,Arm64,Abi,在aarch32中,更准确地说是ARM-OABI,仍然使用swi的立即值来传输系统调用号。另一方面,在ARM-EABI中,使用寄存器swi#0则表示应使用寄存器 此选项在aarch64中不再可用,因此我一直使用此组合: mov x8, syscall_number svc #0 为什么我必须在此处添加额外的4字节代码大小,而立即值这次仍然未使用? 根据ARM程序员指南,立即值存储在异常综合征寄存器ESR_EL中,因此应可通过mrs读取。或者这已经是一个太大的性能损失 参考资料:
swi
的立即值来传输系统调用号。另一方面,在ARM-EABI中,使用寄存器<代码>swi#0则表示应使用寄存器
此选项在aarch64中不再可用,因此我一直使用此组合:
mov x8, syscall_number
svc #0
为什么我必须在此处添加额外的4字节代码大小,而立即值这次仍然未使用?
根据ARM程序员指南,立即值存储在异常综合征寄存器ESR_EL
中,因此应可通过mrs
读取。或者这已经是一个太大的性能损失
参考资料:
ESR\u ELx
没有任何关系-无论如何都需要读取寄存器,以便将系统调用与其他同步异常(如数据中止)区分开来。这实际上取决于操作系统的选择。ARM64 Windows使用SVC指令上的立即数值来选择哪个系统调用。我认为,将系统呼叫号码作为即时消息稍微有利于安全性,因为它限制了ROP小工具的使用机会。