为什么x86_64汇编具有奇怪的系统调用参数顺序?

时间:2015-02-05 21:13:56

标签: assembly x86-64 system-calls arm64

根据体系结构调用约定部分中的syscall man page,它说明了每个体系结构系统调用参数的各种注册顺序。除了x86_64之外,它们都具有某种逻辑有序意义。例如,arm64按顺序使用x0,x1,x2,x3,x4,然后是x5,这似乎是逻辑和数字顺序。但是对于x86_64,顺序是rdi,rsi,rdx,r10,r8,然后是r9。这对我来说似乎不是一个合乎逻辑的顺序,这引起了我的困惑。为什么x86_64会这样?

谢谢!

1 个答案:

答案 0 :(得分:2)

根据x86-64 ABI的正常用户空间顺序为:rdirsirdxrcxr8,然后{{1 }}。这不合逻辑,打败了我们如何提出这一点。

由于r9指令符号syscall,必须替换它并rcx已被选中。这至少在某种程度上是合乎逻辑的:)