【问题标题】:Why does x86_64 assembly have odd syscall argument order?为什么 x86_64 程序集有奇怪的系统调用参数顺序?
【发布时间】:2015-04-05 21:46:19
【问题描述】:

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

谢谢!

【问题讨论】:

  • 下一个问题:当已经将 8 位跳转称为“短”时,为什么他们将 32 位跳转称为“近”而不是“远”。

标签: assembly x86-64 system-calls arm64


【解决方案1】:

根据 x86-64 ABI 的正常用户空间顺序是:rdirsirdxrcxr8,然后是 r9。这不是更合乎逻辑,击败我他们是如何想出这个的。

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

【讨论】:

    猜你喜欢
    • 2015-03-23
    • 1970-01-01
    • 2019-07-21
    • 2018-05-20
    • 2012-05-07
    • 2016-04-30
    • 2014-04-22
    • 1970-01-01
    • 2012-05-21
    相关资源
    最近更新 更多