【问题标题】:Linux syscall conventions for Armv8Armv8 的 Linux 系统调用约定
【发布时间】:2018-01-26 07:50:40
【问题描述】:

有谁知道我在哪里可以找到 ArmV8 中 Linux 系统调用的约定? 必须传入什么寄存器参数,返回值存放在哪里。

【问题讨论】:

标签: system-calls armv8


【解决方案1】:

使用svc #0 指令发出系统调用。 系统调用号通过寄存器X8传递,返回值存储在X0中。

这是一篇关于 ARMv8 系统调用的有趣文章的链接:Decoding Syscalls in ARM64

这是一个指向Procedure Call Standard for the ARM 64-bit Architecture (AArch64) 的链接,它可以为您提供有关 ARMv8 调用约定的更多信息。

您还可以从一些运行 Linux 的 ARM 机器在终端上运行 man syscall 获取该信息。

这是来自man syscall的信息摘要:

arch/ABI    instruction           syscall #  retval
arm64       svc #0                x8         x0

参数:

arch/ABI      arg1  arg2  arg3  arg4  arg5  arg6  arg7
arm64         x0    x1    x2    x3    x4    x5    -

【讨论】:

  • 1.该文档可能会有所帮助,但它没有回答linux系统调用如何与那些调用约定相关的问题。 2. man syscall 没有提供有关 amrbian 的信息,所以你过于乐观了。 3. 很难肯定地说“指令'svc #0'使用寄存器X8中的数字执行系统调用”(假设这是什么)。阿尔伯特
  • 嗨@AlbertvanderHorst,你是对的,我的回答不是最好的。我编辑了它,所以希望它现在好多了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 2012-10-04
  • 2012-12-30
  • 2016-05-12
  • 2016-03-02
  • 1970-01-01
相关资源
最近更新 更多