Linux内核如何确定函数参数在CPU寄存器中的位置?

问题描述

我想知道Linux内核如何知道在执行系统调用时在哪个寄存器中查找函数参数。例如:我从程序集调用写系统调用。参数存储在rdi,rsi和rdx中。然后内核调用写函数,看起来像write(fd,buf,len)。

但是内核如何知道fd存储在rdi中,buf存储在rsi中,len存储在rdx中? 如何执行?内核中是否存在某种映射可以初始化这些寄存器中的参数?

我想我错过了一些东西。也许甚至与这些寄存器都没有关系? 我会感谢您的帮助:)

解决方法

执行系统调用时,参数将按照x86_64调用约定中的定义存储在寄存器中。在* nix系统上,这些很可能是SystemV。一个简单的C函数的参数也存储在这里,因为编译器还遵循调用约定。因此,无需进行进一步处理即可将参数位置映射到C调用例程。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...