CPU的寄存器如何被用来传递参数给系统调用?

一开始,参数在CPU’s 寄存器里面,然后当系统调用的时候,CPU会将寄存器里面的参数复制到内核空间kernel space,或者说堆栈stack中。

如果系统调用有很多参数,这可能会导致什么问题?

因为CPU里面只有8个通用32位寄存器:eax,ebx,ecx,edx,esi,edi,ebp,esp,除了eax和esp两个特殊的,只有剩下的6个general-purpose register通用寄存器可以存东西。
最多存32位的东西,最多存6个东西,所以多了会出错。

提出一种传递参数的替代方法,以避免这个问题

6个寄存器,随便挑几个寄存器,用这些寄存器存指针,指针指向内存,内存存数据。

评论