X86-64系统调用使用
syscall说明。该指令将返回地址保存到
rcx,然后
rip从
IA32_LSTARMSR
加载。即
rcx立即被摧毁
syscall。这就是为什么
rcx必须替换系统调用ABI的原因。
相同的
syscall指令也保存
rflags到中
r11,然后
rflags使用
IA32_FMASKMSR
进行掩码。这就是为什么
r11内核不保存它的原因。
因此,这些更改反映了系统调用机制的工作方式。这就是为什么内核被迫声明
rcx并且
r11未保存,甚至不能使用它们进行参数传递的原因。
参考:英特尔指令集参考,查找
SYSCALL。



