系统调用是一种接口,存在于应用程序和系统内核之间,运行系统调用使得应用程序自陷于内核当中(自陷这个词好,说明了一种内核接管机制)。
是这样的没错,x86和ARM主要的区别仅仅在于指令上,或者说寄存器存在差异也可(次要),为什么提到这两种架构对于系统调用的区别呢?
首先从指令层面来分析:linux系统调用封装在c的库文件中,过程就是首先调用库函数,库函数里有系统调用,现在已经从用户模式转变成系统模式。通过反汇编可以看到,高级语言写的函数调用内部的系统调用已经汇编成指令:INT 0x80 这是典型的x86指令,如果在ARM系统中则被翻译成SWI 0x000...两条指令都是中断跳转。
与此同时,这里有个参数及系统调用号的细节:x86里系统调用号由esx传递,参数由寄存器传递,ARM中系统调用号是SWI的操作数,参数在寄存器r0~r4中。
在程序地址方面,x86处理器在系统调用列表中找到系统调用号,进行执行。ARM则是转入同一个地址0x80,开始执行指令,对自陷处只有这一个总的入口,SWI的操作数决定跳转地址,也就是调用号。
时间: 2024-10-12 19:57:28