为什么x86_64程序集的系统调用参数顺序奇怪



根据体系结构调用约定部分中的syscall手册页,它说明了每个体系结构syscall参数的各种寄存器顺序。除了x86_64之外,所有这些都具有某种逻辑有序意义。例如,arm64按顺序使用x0、x1、x2、x3、x4,然后是x5,这似乎是合乎逻辑的数字顺序。但对于x86_64,顺序是rdi、rsi、rdx、r10、r8,然后是r9。对我来说,这似乎不太符合逻辑,这导致了我的困惑。x86_64为什么是这样的?

谢谢!

根据x86-64 ABI,正常的用户空间顺序是:rdirsirdxrcxr8,然后是r9。这不太合乎逻辑,让我无法理解他们是如何想出这个主意的。

由于syscall指令破坏了必须被替换的rcx,因此选择了r10。这至少有点合乎逻辑:)

最新更新