从用户空间直接访问系统调用
通常,系统调用靠C库支持。用户程序通过包含标准头文件并和C库链接,就可以使用系统调用(或者调用库函数,再由库函数实际调用)。但如果你仅仅写出系统调用,glibc库恐怕并不提供支持。值得庆幸的是,Linux本身提供了一组宏,用于直接对系统调用进行访问。它会设置好寄存器并调用陷人指令。这些宏是_syscalln(),其中n的范围从0到6。代表需要传递给系统调用的参数个数,这是由于该宏必须了解到底有多少参数按照什么次序压入寄存器。举个例子,open()系统调用的定义是:
long open(const char *filename, int flags, int mode)
而不靠库支持,直接调用此系统调用的宏的形式为:
#define NR_ open 5
syscall3(long, open, const char*,filename, int, flags, int, mode)
这样,应用程序就可以直接使用open()
对于每个宏来说,都有2+ n个参数。
第一个参数对应着系统调用的返回值类型。
第二个参数是系统调用的名称。再以后是按照系统调用参数的顺序排列的每个参数的类型和名称。
_NR_ open在<asm/unistd.h>中定义,是系统调用号。该宏会被扩展成为内嵌汇编的C函数。由汇编语言执行前一节所讨论的步骤,将系统调用号和参数压入寄存器并触发软中断来陷入内核。调用open()系统调用直接把上面的宏放置在应用程序中就可以了。
让我们写一个宏来使用前面编写的foo()系统调用,然后再写出测试代码炫耀一下我们所做的努力。
#define NR foo 283
_sysca110(long, foo)
int main()
{
long stack size;
stack_ size=foo();
printf("The kernel stack
size is 81d/n",stack_ size);
return;
}
从用户空间直接访问系统调用相关推荐
- linux用户空间寄存器,在Linux用户空间中访问硬件寄存器
我想写Linux用户空间中OMAP3530上的硬件寄存器.请找到下面的代码. Mmap返回错误: 内存映射失败.错误-1 mmap:权限被拒绝 #include #include #include # ...
- linux包含绝对路径头文件,linux-kernel - 访问用户空间内存访问函数(如access_ok(),get_from_user())需要包含的头文件的确切路径。 - 堆栈内存溢出...
我在linux-headers-3.2.0-49中搜索了用户内存访问功能. 它在uaccess.h头文件中定义,但是uaccess.h文件太多. 下面是我在linux-headers-3.2.0-49 ...
- Linux内核访问用户空间文件:get_fs()/set_fs()的使用
测试环境:Ubuntu 14.04+Kernel 4.4.0-31 关键词:KERNEL_DS.USER_DS.get_fs().set_fs().addr_limit.access_ok. 参考代码 ...
- 用户空间访问I2C设备驱动
2012-01-11 15:33:43 标签:Linux I2C 字符设备 设备驱动 用户空间 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. ...
- AndroidM 内核空间到用户空间接口类型
Android系统中, 驱动程序因商业需求分为运行在用户空间的hardware层以及运行在内核空间的驱动程序, 大多情况下内核驱动都需要提供用户空间访问的接口. Linux内核空间到用户空间的接口有主 ...
- I/O流(包括操作系统与内核,用户空间),I/O工作原理,Java I/O流的设计及Java IO系统
文章目录 一.操作系统与内核 1.1操作系统 1.2内核 1.3 关系图 二.内核空间和用户空间 2.1:目的: 2.2.内核空间(Kernel-space): 2.3.用户空间(User-space ...
- linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间
linux驱动程序一般工作在内核空间,但也可以工作在用户空间.下面我们将详细解析,什么是内核空间,什么是用户空间,以及如何判断他们. Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,L ...
- linux之用户空间和内核空间
linux驱动程序一般工作在内核空间,但也可以工作在用户空间.下面我们将详细解析,什么是内核空间,什么是用户空间,以及如何判断他们. Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,L ...
- linux 内核将两个设备相关联,linux用户空间和内核空间交换数据
转载地址:http://www.poluoluo.com/server/201107/138420.html 在研究dahdi驱动的时候,见到了一些get_user,put_user的函数,不知道其来 ...
最新文章
- python中的切片和join的妙用
- 爱之箭发射(las)
- 对Spring的一些个人理解
- 与毒”共舞30年!清华美女研究生为何放弃高薪,选择特招入伍?背后的原因令人泪崩......
- Java Spring 异常处理
- VM 虚拟机 centos7 安装redis
- java-如何反编译
- CSS揭秘--笔记--滚动提示
- 仪电电子“结盟”复旦大数据学院
- 甘教课标版小学生计算机课,测评:《第6课 制作简单的表格教案》小学信息技术甘教课标版五年级上册教案4696(2)...
- 快递管理系统JavaI(连接数据库)
- 本地搭建私有云盘:虚拟机安装群晖NAS 1/5
- SharedPreferences 使用方法详解
- Day66 Web开发7 旅游详情页面
- qqwry.dat的数据结构解释
- 洛谷P1080 [NOIP2012 提高组] 国王游戏(贪心,高精度)
- HBase、Phoenix
- 单片机复试面试(一)
- 为什么要基于模型设计?
- HTML中img标签的src属性为绝对路径时,在IE中图片可显示,在firefox中不行
热门文章
- 【X264系列】之不同强度的printf
- makefile编译脚本
- matlab中的lsqcurvefit使用
- HEVC测试序列网址和账号
- c++ java setobjectarrayelement_java中jni的使用:C/C++操作java中的数组
- 华为路由器ws5200虚拟服务器,想处理垃圾路由吗?那就先入手这款华为WS5200路由器吧...
- 服务器和硬盘如何区分,服务器硬盘和普通硬盘区别介绍
- 定值保险计算举例_农村养老保险管理系统(在线查询)https://www.chashebao.com/yanglaobaoxian/17556.h...
- jq post 表单提交文件_Power Query 中使用POST方法进行网络抓取的尝试
- 技术胖Flutter第四季-19导航父子页面的跳转返回