汇编语言调用Linux系统调用
首先查找系统调用文件
#find / -name unistd.h
/root/linux/include/unistd.h
/usr/include/linux/unistd.h
/usr/include/sys/unistd.h
/usr/include/bits/unistd.h
/usr/include/unistd.h
查看系统调用值
/root/linux/include/unistd.h
#define __NR_setup 0 /* used only by init, to get system going */
#define __NR_exit 1
#define __NR_fork 2
#define __NR_read 3
#define __NR_write 4
#define __NR_open 5
#define __NR_close 6
其他更多自行参考
Linux的exit
在linux中,这两个函数都用于正常终止一个函数。
但是函数_exit()直接是一个sys_exit系统调用;
而函数exit()则通常是普通函数库中的一个函数,它会先执行一些清楚操作,例如调用执行各终止处理程序、关闭所有标准IO等,然后再调用sys_exit。
_exit.c
#define _LIBRARY_ //定义符号常量
#include<unistd.h> //linux标准头文件。定义了各种符号常数和类型,并声明了各种函数(详见头文件);若定义了_LIBRARY_,则还包括内核系统调用号和内嵌汇编_syscall0()等。
这是内核使用的程序(退出)或终止函数。
直接调用系统中断int 0x80,功能号为_NR_exit。参数exit_code退出码。关键字volatile用于告诉编译器gcc该函数不会返回。
这样可以让gcc产生一些更好的代码,更重要的使用这个关键字可以避免产生某些假警告信息。
volatile void _exit(int exit_code)
{
_asm_("int $0x80"::"a"(_NR_exit),"b"(int exit_code));
}
这里用到了嵌入汇编,这里执行的动作就是调用系统中断int 0x80,在调用系统中断之前,将系统调用号_NR_exit放到寄存器eax中,退出码exit_code放到寄存器ebx中。
用于关键字volatile告诉编译器gcc告诉该函数没有返回,所以在嵌入汇编中并没有给出输出寄存器。
汇编语言调用Linux系统调用相关推荐
- qt调用linux系统调用,qt在其他函数调用数据库
<多核与GPU编程:工具.方法及实践>----3.2 线程 本节书摘来自华章出版社<多核与GPU编程:工具.方法及实践>一书中的第3章,第3.2节, 作 者 Multicore ...
- linux内核关闭网络巨帧xenomai,xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务...
版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正. 1. 引出问题 上一篇文章xenomai内核解析--双核系统调用(一)以X86处理器为例,分析了xenomai内核调用的流程, ...
- (转)Linux系统调用和库函数调用的区别
Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions). 系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意 ...
- linux系统调用和库函数调用的区别
1.系统调用 系统调用提供的函数如open, close, read, write, ioctl等,需包含头文件unistd.h.以write为例:其函数原型为 size_t write(int fd ...
- 【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )
文章目录 一.进程状态 二.进程创建 三.进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一.进程状态 Linux 进 ...
- python 调用linux内核api_Linux系统调用及用户编程接口(API)学习
Linux系统学习 系统调用指操作系统提供给用户程序调用的一组"特殊"接口,用户程序可以通过这组"特殊"接口来获得操作系统内核提供的服务. 为什么用户程序不能直 ...
- 什么是Linux系统调用system call?(Linux内核中设置的一组用于实现各种系统功能的子程序)(区别于标准C库函数调用)核心态和用户态的概念、中断的概念、系统调用号、系统调用表
文章目录 什么是系统调用? 为什么要用系统调用? 系统调用是怎么工作的? 如何使用系统调用? _syscall*()是什么? errno是什么? 调用性能问题 Linux系统调用列表 进程控制 文件系 ...
- 转载 linux系统调用和库函数调用的区别
源地址 http://blog.csdn.net/zhangskd/article/details/6956638 Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(L ...
- 操作系统原理,系统调用,系统调用与库函数API等函数之间的调用关系,功能与机制设计,系统调用的执行过程与Linux系统调用执行示例,不同操作系统下的PCB
操作系统原理,系统调用,功能与机制设计,系统调用的执行过程与Linux系统调用执行示例,不同操作系统下的PCB 一.系统调用:操作系统功能调用,用户在编程时可以调用的操作系统功能. 1.系统调用是操作 ...
最新文章
- C语言的一个之前没有见过的特性
- 深挖数据价值 阿里云栖开年大会报道
- 谁说用 Git 一定要用命令行?试试 SourceTree 吧
- 【FPGA】SRIO例子程序仿真分析实践
- 高德地图只显示一个省_浅谈当下各种导航软件:高德地图、百度地图、腾讯地图...
- 一友人昨夜接到电话,发生何事
- JDK提供的检测工具
- java 泛型机制_java中的泛型机制
- python安装环境傻瓜式安装_Python环境安装(两种方式)
- GWT 2 Spring 3 JPA 2 Hibernate 3.5教程
- qt中创键树形控件QTreeWidget与QStackWidget相绑定
- 原子变量 java_Java原子变量详解
- PythonBasics 中文系列教程 · 翻译完成
- MongoDB中常用的几种数据类型
- STM32中使用MMA7660重力加速度传感器
- 关于topk accuracy
- 冰雪旅游城长春打造冰雪景观盛宴迎新春
- 跳动爱心代码-李峋同款爱心代码(升级版)
- oracle 按照固定顺序排序
- HLk-v20一v20s详细资料地址