gpt4 book ai didi

Linux x64 : why does r10 come before r8 and r9 in syscalls?

转载 作者:IT王子 更新时间:2023-10-29 01:19:17 26 4
gpt4 key购买 nike

前几天我决定试一试汇编,我一直在玩弄非常基本的东西,比如从 argv 打印东西到 stdout。我找到了 this great list of linux syscall numbers带有参数和所有内容,我很好奇为什么 r10 用于 r8r9 之前的参数。我发现了关于什么可以用于什么以及何时使用的各种奇怪约定,例如循环计数器如何进入 rcxr10 上移是否有特殊原因?是不是更方便?

我可能还应该提到我对此感兴趣是出于好奇,而不是因为它给我带来了问题。

编辑:我找到了 this question接近,引用 the x64 ABI documentation在第 124 页上,它指出用户级应用程序使用 rdi、rsi、rdx、rcx、r8、r9。另一方面,内核使用 r10 而不是 rcx,并销毁 rcxr11。这也许可以解释 r10 是如何结束的,但为什么要换进去呢?

最佳答案

RCXR11syscall 指令使用,并立即被它销毁。因此这些寄存器不仅在系统调用后不保存,甚至不能用于参数传递。因此选择 R10 来代替不可用的 RCX 来传递第四个参数。

另见 this answer有关 syscall 如何使用这些寄存器的更多信息。

引用:Intel's Instruction Set Reference , 查找 SYSCALL

关于Linux x64 : why does r10 come before r8 and r9 in syscalls?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21322100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com