系统调用与C语言调用很相似,以X86-32为例,有以下步骤:
1.调用C语言函数库中的外壳(Wrapper)函数,发起系统调用。
2.如有参数,外壳函数要保证所有参数可用并将它们复制到特定寄存器供内核使用
3.为了区分各个系统调用,外壳函数还需要将系统调用的编号复制到CPU寄存器中(%eax)
4.此处还是外壳函数执行中断指令(int 0x80),是处理器从用户态切换到内核态,执行中断0x80中断矢量指向的代码
5.内核响应0x80,调用system_call()。
系统调用与C语言调用很相似,以X86-32为例,有以下步骤:
1.调用C语言函数库中的外壳(Wrapper)函数,发起系统调用。
2.如有参数,外壳函数要保证所有参数可用并将它们复制到特定寄存器供内核使用
3.为了区分各个系统调用,外壳函数还需要将系统调用的编号复制到CPU寄存器中(%eax)
4.此处还是外壳函数执行中断指令(int 0x80),是处理器从用户态切换到内核态,执行中断0x80中断矢量指向的代码
5.内核响应0x80,调用system_call()。