linux内核分析——扒开系统调用的三层皮(上)

20135125陈智威

 原创作品转载请注明出处

  《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

 

系统调用:库函数封装了系统调用,通过库函数和系统调用打交道

用户态:低级别执行状态,代码的掌控范围会受到限制。

内核态:高执行级别,代码可移植性特权指令,访问任意物理地址

为什么划分级别:如果全部特权,系统容易崩溃

 

 

系统调用的三层皮:xyz,system_call,sys_xyz。即:API,中断向量,服务程序。

      xyz()函数是系统调用对应的API,这个应用程序编程接口里面封装了一个系统调用,这个系统调用会触发一个int0x80的中

断,产生向量为128的编译异常,0x80这个中断向量对应着system_call这个内核代码的起点,这个内核代码里面会

有SAVE_ALL,然后执行到sys_xyz()中断服务程序,进入程序里面处理,在中断服务程序执行完之后会ret_from_sys_call,在return的过程

中可能会发生进程调度,如果没有进程调度,就会iret,回到用户态接着执行。

内核实现了很多不同的系统调用, 进程必须指明需要哪个系统调用,这需要传递一个名为系统调用号的参数

system_call是Linux中所有系统调用的入口点,每个系统调用至少有一个参数,即由eax传递的系统调用号。具体过程如下:

1.一个应用程序调用fork()封装例程,那么在执行int $0x80之前就把eax寄存器的值置为2(即__NR_fork)。 2.这个寄存器的设置是libc库中的封装例程进行的

,因此用户一般不关心系统调用号 3.进入sys_call之后,立即将eax的值压入内核堆栈

寄存器传递参数也有相应的限制:


1.每个参数长度不能超过寄存器的长度(32位)

2.在eax外,参数的个数不能超过6个(ebx,ecx,edx,esi,edi,ebp),超过6个就使用指针调用某一个块的内存。

 

 

 

 

3、使用库函数API和C代码中嵌入汇编代码触发同一个系统调用:

  使用库函数获取系统当前的时间:

 

命令:

编写time程序:vi time.c

编译:gcc time.c -o time -m32

执行:./time

 

 

实验总结:

      我认为系统调用的工作机制是:当用户态进程调用一个系统调用时,CPU切换到内核态并开始执行一个内核函数,由API、中断向量和中断处理程序协调完成。

而在系统调用的过程中,系统调用号使用eax寄存器传递参数。

 

转载于:https://www.cnblogs.com/vioczw/p/5299115.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357488.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微型计算机系统中的内部寄存,微机原理与接口技术习题集汇总.doc

微机原理与接口技术习题集汇总.doc (50页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!29.9 积分.word格式,第二章 微机基本组成及工作原理1.1微型机的基本结构一、单项选择题1&#xf…

10个对Web开发者最有用的Python包

Python最近成为了开发人员最喜欢的语言之一。无论你是专业的,业余的,还是一个初学者,你都可以从Python语言及其程序包中受益。Python已经被证明是当今最具活力的面向对象的编程语言之一。这就是为什么即使是世界顶级公司也广泛使用这种语言的…

真正释放Maven和Java EE的强大功能

如果野心和愿景太复杂而无法使用,那么它们可能会毁灭伟大的解决方案。 尽管Maven和Java EE是在整个Java行业中都已建立的良好技术,但是使用它们并使用其作者希望您使用的所有技术和模式来设计项目可能非常棘手。 在开发过程中途,由于一开始就…

【前端面试题】2021/3/12挺经典的面试题,这个经历很深刻。

今天面试去啦,填了职业性格测试,人格测试及招聘的基本经历信息,面试官是技术头头,柔中带钢,问题润物细无声的感觉,很考验基本功。 上午10:30面试了一个达达的前端,采用的是线上腾讯会议的方式&a…

html5 ios cookie,ios – WKWebView,获取所有cookie

我想从WKWebView获取所有cookie.为什么?我已经启动了一个使用基于Web的身份验证的项目.因此,我应该拦截cookie以确保用户已登录并用于其他目的.另一种情况 – 想象一下,如果用户登录,而不是“杀死”应用程序 – 由于存储此cookie会话的一些延迟将丢失:(.The problem…

【前端面试题】2021/3/15面试题

最近在boss直聘上投了很多简历,记录一下今天的面试题,这个好几个都是电话直接打过来问时间方便?我一回答方便就直接开始丢题目,我也不知道哪个公司的。感觉公司不是很正规的感觉,感觉那边有个问题题库,面试…

javafx打包路径问题_关于JavaFX的最常见问题

javafx打包路径问题上周,我在斯德哥尔摩的Jfokus 2012上做了一个关于JavaFX的演讲,当时我意识到每次活动都会问三个问题。 似乎有一个普遍的兴趣,所以我尝试在这篇文章中回答他们(尽可能的说实话): iPad或其…

【前端面试题】关于一些js的一些面试题(金融行业),我和面试官扯了三个小时

今天去面试了一家金融公司,招聘比较着急,一面后直接二面等结果,这种公司一般对js要求比较高,笔试题基本都是js相关的题,针对公司的客户要求也会做一些jquery,vue.react相关的插件,H5及webAPP。下面直接说题…

上海大学计算机学院客座教授,刘云虹教授受聘上海大学外国语学院客座教授并做学术讲座...

11月29日14:00,南京大学外国语学院副院长、博士生导师刘云虹教授被我院聘为客座教授并做主题为《中国文学外译与翻译历史观》的学术讲座。学院副院长苗福光教授主持,副院长邓志勇教授(主持工作)为刘教授颁发了聘书。讲座从刘教授自己的学术研究领域和起点…

安徽阜阳计算机高中学校排名,安徽阜阳排名靠前的三大高中,有争议?2020年高考成绩说话!...

安徽省阜阳市,古称汝阴,阜阳历史悠久、文化璀璨、人才辈出,有阜阳剪纸等国家非物质文化遗产,也是管仲、鲍叔牙等历史名人的故乡;阜阳风景秀丽,辖区内有诸多知名景点,其中八里河风景区为国家AAAA…

数组练习2

结对开发:张哲 张晓菲 题目:返回一个数组中子数组最大和,数组可以首尾相连。 一、实验思路 本次实验在第一次的基础上增加了一些难度,数组可以首尾相连组成一个环,我们两个经过思考和讨论后得到一个方法: …

Java 8中最快的垃圾收集器是什么?

OpenJDK 8具有几种垃圾收集器算法,例如Parallel GC , CMS和G1 。 哪一个最快? 如果默认的GC从Java 8中的并行GC更改为Java 9中的G1(当前建议),将会发生什么? 让我们对其进行基准测试。 基准方法…

【粉丝需求】如何把一个前端网页都搞下来?

一般比较简单的就是展示型网站,这类网站 最好仿制,如果带后台的不太好获取完整后台代码,但是搞一下前端代码还是可以的。一般前端不管用什么框架,基础元素由html+css+javaScript组成。 声明:本文仅仅提供一种思路,如有对站点侵权的地方,请联系博主删除。 我用的是HB-X,…

九、其他常用命令

一、挂载命令 可以理解为windows当中的分配盘符操作 1.查询与自动挂载 [rootlocalhost ~]# mount #查询系统中已经挂载的设备 [rootlocalhost ~]# mount –a #依据配置文件/etc/fstab的内容,自动挂载一遍 只要按照对应的格式将相应的分区添加到list中,那…

【ECharts系列|01入门】 从入门到天黑【入门级教程实战】

ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求。 ECharts 遵循 Apache-2.0 开源协议,免费商用。 ECharts 兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox&#xff0…

Java开发人员应了解的JVM流行语

本文将与您分享一些JVM“流行语”,它们对于Java开发人员在执行任何JVM性能和垃圾回收调优之前理解和记住非常重要。 本文末尾还提供了一些技巧,包括一些高级性能调优最佳实践。 将来的文章中将探讨有关Oracle HotSpot并发GC收集器(例如CMS和G…

【ECharts系列|02可视化大屏】 舆情分析,人口分析及警情警力活动情况的实现【上篇】

简介&#xff1a;ECharts实现可视化大屏展示&#xff0c;包含人口分析&#xff0c;警情警力分析多张效果图&#xff0c; 完整的htmlcssjsimg:https://download.csdn.net/download/weixin_41937552/16361615 项目结构&#xff1a; activity.html <!doctype html> <met…

spring rmi_Spring远程支持和开发RMI服务

spring rmiSpring远程支持简化了启用远程服务的开发。 当前&#xff0c;Spring支持以下远程技术&#xff1a;远程方法调用&#xff08;RMI&#xff09;&#xff0c;HTTP调用程序&#xff0c;Hessian&#xff0c;Burlap&#xff0c;JAX-RPC&#xff0c;JAX-WS和JMS。 远程方法调…

用Paint Tool SAI绘制漫画

漫画绘图软件 Paint Tool SAI是一个来自日本的小巧的漫画辅助绘图软件&#xff0c;只有11M大小。 这个没有任何现成的模板和组件&#xff0c;只能自己一笔一笔的话&#xff0c;画笔、图层等功能与Photoshop类似&#xff0c;但没有PS其它大量功能&#xff0c;因此操作更加便捷&a…

【ECharts系列|02可视化大屏】 舆情分析,人口分析及警情警力活动情况的实现【下篇】

简介&#xff1a;ECharts实现可视化大屏展示&#xff0c;包含人口分析&#xff0c;警情警力分析多张效果图&#xff0c; 完整的htmlcssjsimg:https://download.csdn.net/download/weixin_41937552/16361615 上一篇&#xff1a;【ECharts系列|02可视化大屏】 舆情分析&#xff0…