linux系统调用_「Linux系统」系统调用是如何传递参数的

2023-05-16

系统调用是如何进行参数传递的?

在用户态的函数调用时,是通过进程内存的栈空间来传递参数的,但是对于系统调用而言,需要从用户态进入内核态,没有相应的堆栈可以被用来传参。

系统调用是通过CPU的寄存器来进行参数传递的

系统调用前,参数保存在CPU寄存器中,在内核态运行实际的系统服务例程之前,内核将相应的寄存器内容拷贝到内核堆栈中,实现参数的传递。

为了使用寄存器进行参数传递,以下两个条件必须得到满足:

  • 每个参数的长度不能超过一个寄存器的长度(32位)
  • 除了系统调用号外,参数的数目不能超过6个

参数保存在CPU的哪些寄存器中?

eax, ebx, ecx, edx, esi, edi, ebp这7个寄存器被用来传递参数,通过SAVE_ALL宏保存到内核栈中。

系统调用的返回值是如何传递的?

也是通过寄存器,在eax中。看下面两段代码,运行的结果应该是一样的:

总结

系统调用本质上是通过CPU寄存器进行用户态与内核态之间的数据(函数参数及返回值)传递。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux系统调用_「Linux系统」系统调用是如何传递参数的 的相关文章

随机推荐