码迷,mamicode.com
首页 > 其他好文 > 详细

关于x86与ARM系统调用的问题

时间:2015-02-04 12:31:54      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:

系统调用是一种接口,存在于应用程序和系统内核之间,运行系统调用使得应用程序自陷于内核当中(自陷这个词好,说明了一种内核接管机制)。

是这样的没错,x86和ARM主要的区别仅仅在于指令上,或者说寄存器存在差异也可(次要),为什么提到这两种架构对于系统调用的区别呢?

首先从指令层面来分析:linux系统调用封装在c的库文件中,过程就是首先调用库函数,库函数里有系统调用,现在已经从用户模式转变成系统模式。通过反汇编可以看到,高级语言写的函数调用内部的系统调用已经汇编成指令:INT 0x80 这是典型的x86指令,如果在ARM系统中则被翻译成SWI 0x000...两条指令都是中断跳转。

与此同时,这里有个参数及系统调用号的细节:x86里系统调用号由esx传递,参数由寄存器传递,ARM中系统调用号是SWI的操作数,参数在寄存器r0~r4中。

在程序地址方面,x86处理器在系统调用列表中找到系统调用号,进行执行。ARM则是转入同一个地址0x80,开始执行指令,对自陷处只有这一个总的入口,SWI的操作数决定跳转地址,也就是调用号。 

关于x86与ARM系统调用的问题

标签:

原文地址:http://www.cnblogs.com/jkserge/p/4271741.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!