根据体系结构调用约定部分中的syscall手册页,它说明了每个体系结构syscall参数的各种寄存器顺序。除了x86_64之外,所有这些都具有某种逻辑有序意义。例如,arm64按顺序使用x0、x1、x2、x3、x4,然后是x5,这似乎是合乎逻辑的数字顺序。但对于x86_64,顺序是rdi、rsi、rdx、r10、r8,然后是r9。对我来说,这似乎不太符合逻辑,这导致了我的困惑。x86_64为什么是这样的?
谢谢!
根据x86-64 ABI,正常的用户空间顺序是:rdi
、rsi
、rdx
、rcx
、r8
,然后是r9
。这不太合乎逻辑,让我无法理解他们是如何想出这个主意的。
由于syscall
指令破坏了必须被替换的rcx
,因此选择了r10
。这至少有点合乎逻辑:)