16、驱动访问大揭秘

应用程序主要是通过系统调用来访问驱动程序图。

接下来我们以read.c应用程序来分析:

我们知道read.c是个系统调用,系统调用之前,他是在我们的应用程序当中。实现是在内核当中,但是read.c是怎么找到内核的实现代码的呢?接下来就是这内容:

这是read.c的代码:

我们现在静态编译和反汇编:

然后打开dump:搜索:main函数:/main

我们主要是看read方法是如何实现的:

这个代码主要做了两件工作:

第一件是把我们read的三个参数传到我们的r0-r2里面去,保存起来。我们都知道在arm系统中,当参数小于4个时是采用通用寄存器来保存参数。第二件就是去调用libc_read.

这里最重要的是两行代码:

Mov r7,#3 ;0x3

Svc 0x00000000

从上面看到,read的主要的工作是把3传给r7,然后使用svc这个命令,叫做系统调用指令。当我们使用了这个指令之后。我们的pc指针会从用户空间进入到内核空间,而且入口是固定的,其次就是内核如何处理的问题了。

1.首先是pc指针进入内核的固定入口。

2.其次,内核回去取这个number,就是3.(3代表的是,从统一的入口进入后,我要去调用read的实现代码)。

3.第三是根据number去查这个表,查出来的3是read所对应的内核系统的实现代码sys_read.

这是证明上面的说法:

首先找固定的入口:

这就是入口的系统代码,我们从注释可以清楚的看到。这是取得系统调用的编号。

接着就是根据这编号去查表了,接着往下找,就可以看到sys_call_table.

通过搜索,找到了这张表:

我们看到他紧接着又去包含call.S:

这是一个包含了很多函数的一张表,然后系统根据我们的number=3,去找到对应的函数。上面知道,我们传进来的number是等于3的。利用3这个标号找这个表,找出来的正好是sys_read这个函数。

接下来就是分析sys_read是咋实现的啦,该函数是在read_write.c中。

通过宏定义的替换,就会变成sys_read.最重要的是调用vfs_read函数。

//其中最重要的是上面这个函数。当我们初始化驱动程序的时候,就会给设备指定一个file_operation结构,然后使用read这个设备指针来调用。这个设备指针就是我们在驱动程序实现的设备方法。

总结图:

时间: 2024-12-29 23:57:24

16、驱动访问大揭秘的相关文章

打造人气博客大揭秘(下)

引导语:前段花了2整天时间写了一篇<打造人气博客大揭秘(上)>,在A5.Chinaz.推一把等地方发布,甚受欢迎,很荣幸被A5推荐到正头条,在这里感谢A5,看过该篇文章的同学都知道是关于博客优化以及增强博客互动等基础建设方面内容,所以自己感觉还得写一篇运营推广篇.最近走亲戚.朋友聚会忙得不也乐乎,今天是年初六有点空闲,没事得动动笔了. 一个人气博客能取得成功它的因素是综合的,但"内容为王",有优质的内容,就"酒香不怕巷子深",但现在博客就如中国大学生,满

【转载】2014 IT公司校招应届生待遇大揭秘

2014 IT公司校招应届生待遇大揭秘 公司名称        职位类别        待遇(校招年份) 百度                  开发类                13K*14.6 + 800饭补(400+20*20) (2014) (注:今年百度相对比较多的人拿了special)                  测试类.前端类      12K*14.6 + 800饭补(400+20*20)  (2014)                  产品本硕           

用jdbc访问大段文本数据

1 package it.cast.jdbc; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.File; 6 import java.io.FileNotFoundException; 7 import java.io.FileReader; 8 import java.io.FileWriter; 9 import java.io.IOException; 10 impo

淘宝等seo广告里面所讲的三天上首页的快排技术大揭秘

淘宝等seo广告里面所讲的三天上首页的快排技术大揭秘 淘宝seo快排技术 今天,我在志在指尖群里面看了看,有人说做一个排名其实非常的简单(我去,简单?想做好seo这是何等漫长的一个事情,谈何简单)我们都知道,做好seo,不仅要做好站内,也要做好站外,不管是关键词布局,内链布局等,还是外链创设,在这是文章书写等,这都是需要很大耐心以及技术的.所以,我没打扰他,我就想听听他口中所谓seo'简单'二字是什么意思,结果意想不到,他就直说了四个字-淘宝快排-what fuck?这四个字让我笑得肚子疼(这里

【高德地图API】从零开始学高德JS API(七)——定位方式大揭秘

摘要:关于定位,分为GPS定位和网络定位2种.GPS定位,精度较高,可达到10米,但室内不可用,且超级费电.网络定位,分为wifi定位和基站定位,都是通过获取wifi或者基站信息,然后查询对应的wifi或者基站位置数据库,得到的定位地点.定位数据库可以不断完善不断补充,所以,越定位越准确.本文详细描述了,如果使用高德JS API来实现位置定位.城市定位的方法,包含了IP定位,浏览器定位,检索定位等多种网络定位方法.当然,如果您的手机有GPS功能,那么使用浏览器定位的时候,会自动获取GPS信息,使

字符编码乱码问题(servlet底层 编码大揭秘)

好多初学者会遇到,请求过去的信息内包含中文(一般会是get方式提交过去的请求会出现).好郁闷,这是为什么呢.有下面分析下,说的不好可以吐槽 话说我们能遇到这种编码的问题,归根结底就是这  这 web开发不是中国人开发的,中国文化博大精深,四大发明渊源流传,可惜,我们太自己为是了,来了个闭关锁国政策,弄得中国跟不上时代的步伐,不潮了,落伍了,互联网时代被西方人抢了个先,发明了,我们只能用别人的了.我们也知道,西方讲的是英语,所以他们采用的编码格式是iso-8895-1.而这  这种编码方式只占两个

String的split()方法探索和大揭秘

其实没打算写这么一篇博文的,但是昨天在逛论坛的时候,发现一帖子,然后我又把帖子的内容在群里发了一通,结果出现了让人惊讶的结果,所以这里简单的给大家分享一下split()方法,免得大伙儿以后还会出现这种基本知识错误! 接着说一下,昨天看到的帖子内容: String[] str1 = ";;;".split(";"); String[] str2 = ";a;;".split(";"); String[] str3 = "

大豆生物柴油驱动的大巴斯(Bus)

请看下图: 这是大豆生物柴油(Soybean biodiesel)驱动的大巴斯(Bus)的外观,感觉很有劲. 回顾历史,1893年,德国学者Rudolf Diesel(1858-1913)发明了一种"内燃机",使用花生(peanut)油驱动(在机器内部"燃烧"),产生动力.后来,人们就把这种动力机械叫做"Diesel引擎",其中的燃油也叫做"Dieseloil"(中文名字叫"柴油"). 随着石油工业的兴起,

我的新课--HTTPS全景大揭秘正在筹划中

在谷歌和苹果等公司的强力推动下,HTTPS的时代已经来临.为顺应时代趋势并响应学员的需求,广州八神 继<软件性能测试>.<快速上手Jmeter性能测试工具>后录制第3套课程<HTTPS全景大揭秘>.课程的目的只有一个,让学员一次性了解关于HTTPS的方方面面. 本套课程先从密码学的基础知识讲起,再带领大家回顾计算机网络从第一层到第七层需要掌握的知识.具备以上知识铺垫后,进入TLS和HTTPS的世界.同时针对HTTPS的应用.openssl命令.证书的生成和校验过程.性能