首页 > 代码库 > 关于x86与ARM系统调用的问题
关于x86与ARM系统调用的问题
系统调用是一种接口,存在于应用程序和系统内核之间,运行系统调用使得应用程序自陷于内核当中(自陷这个词好,说明了一种内核接管机制)。
是这样的没错,x86和ARM主要的区别仅仅在于指令上,或者说寄存器存在差异也可(次要),为什么提到这两种架构对于系统调用的区别呢?
首先从指令层面来分析:linux系统调用封装在c的库文件中,过程就是首先调用库函数,库函数里有系统调用,现在已经从用户模式转变成系统模式。通过反汇编可以看到,高级语言写的函数调用内部的系统调用已经汇编成指令:INT 0x80 这是典型的x86指令,如果在ARM系统中则被翻译成SWI 0x000...两条指令都是中断跳转。
与此同时,这里有个参数及系统调用号的细节:x86里系统调用号由esx传递,参数由寄存器传递,ARM中系统调用号是SWI的操作数,参数在寄存器r0~r4中。
在程序地址方面,x86处理器在系统调用列表中找到系统调用号,进行执行。ARM则是转入同一个地址0x80,开始执行指令,对自陷处只有这一个总的入口,SWI的操作数决定跳转地址,也就是调用号。
关于x86与ARM系统调用的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。