驱动接口函数调用过程

本文深入解析驱动程序接口函数如何被调用,从反汇编读取驱动程序开始,通过__libc_read函数,进入内核态,进而解析sys_call_call表,最终确定调用sys_read操作。详细阐述了接口函数的实现过程,包括从表中获取对应操作、取出参数、调用实际的文件读取函数等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

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

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

 

 

 





转载于:https://www.cnblogs.com/dchipnau/p/4993326.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值