驱动接口函数调用过程

本文就来揭秘一下到底一个驱动的接口函数是如何被调用的:

 

首先我们来反汇编读驱动的程序:

842584-20151124234308421-1530817295.jpg

 

跳转到__libc_read,发现他把r7赋值给33是传过去的参数,然后调用svc指令,进入内核态相应的入口:

842584-20151124234312031-1372578680.jpg

 

接下来就已经进入内核态,入口函数中将存入r7中的3取出。

842584-20151124234316781-237147826.jpg

 

 

 

 

 

然后加载一张表,表名是sys_call_call,根据这个表中内容,断定3到底是对应什么操作:

842584-20151124234319437-1024420565.jpg

 

这个表如下,可以看出表中第三项对应CALL(sys_read),也就是说传进的参数3代表要执行sys_read

 

842584-20151124234327968-2065812638.jpg

 

 

Sys_read对应函数实现如下图:

 

842584-20151124234329593-1210187128.jpg

 

其中的vfs_read实现如下图,他获取了要读的那个文件的file对象,然后调用file->f_op->read,这正是我们写驱动的时候编写的接口函数:

842584-20151124234333281-1458085663.jpg

 

 

 





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章