x86_64 Linux系统调用参数

时间:2014-03-16 23:27:59

标签: x86-64 system-calls

我正在Linux上学习x86_64程序集,我遇到了一些我希望可以解决的冲突信息。一方面,我已经读过,对于syscall参数,你会按照rdi,rsi,rdx等顺序使用寄存器。但另一方面,我读过你使用寄存器rbx,rcx,rdx等。有人告诉我,这是因为ABI的原因,但我并不完全明白这究竟意味着什么。

所以我想我要问的是,为什么这两种格式和哪种格式适合使用?

谢谢!

1 个答案:

答案 0 :(得分:5)

根据this Wikibooks page,它取决于您使用哪条指令来执行系统调用。

  • 如果您使用的是int $0x80,则应使用eax作为系统调号,ebxecxedx,{参数的{1}},esiedi(按此顺序)。

  • 如果您使用ebp指令,则应使用syscall作为系统调用号码,raxrdirsi,{ {1}},rdxr10参数。

我认为使用r8是首选,因为它更快。