根据体系结构调用约定部分中的syscall man page,它说明了每个体系结构系统调用参数的各种注册顺序。除了x86_64之外,它们都具有某种逻辑有序意义。例如,arm64按顺序使用x0,x1,x2,x3,x4,然后是x5,这似乎是逻辑和数字顺序。但是对于x86_64,顺序是rdi,rsi,rdx,r10,r8,然后是r9。这对我来说似乎不是一个合乎逻辑的顺序,这引起了我的困惑。为什么x86_64会这样?
谢谢!
答案 0 :(得分:2)
根据x86-64 ABI的正常用户空间顺序为:rdi
,rsi
,rdx
,rcx
,r8
,然后{{1 }}。这不合逻辑,打败了我们如何提出这一点。
由于r9
指令符号syscall
,必须替换它并rcx
已被选中。这至少在某种程度上是合乎逻辑的:)