系统调用的工作机制
来源:互联网 发布:流量统计软件 编辑:程序博客网 时间:2024/06/05 15:27
第一部分
使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
图1 39号系统调用
mkdir函数使用的是39号系统调用,作用是创建一个新的目录。int mkdir(const char *pathname, mode_t mode)有两个参数,一个是目录的名字,另外一个参数是创建目录的权限。这里使用的mode_t值使用S_IRWXU(具有读写执行权限),函数返回一个整形变量。
使用库函数API使用mkdir这个系统调用
#include <stdio.h>#include <sys/stat.h>int main(){ mkdir("new_dir",S_IRWXU); return 0;}
图2 API实验效果
按照指定的的权限创建了一个新的new_dir目录
使用C代码中嵌入汇编代码使用mkdir这个系统调用
#include <stdio.h>#include <sys/stat.h>int main(){ char *dirName = "new_dirAsm"; mode_t mode = S_IRWXU; int return_Value = 0; asm volatile ( "movl $39,%%eax\r\n" /*使用eax传递39号系统调用号*/ "movl %1,%%ebx\r\n" /*将第一个参数文件名的地址存入ebx寄存器中*/ "movl %2,%%ecx\r\n" /*将第二个参数文件权限存入ecx寄存器中*/ "int $0x80\r\n" /*执行$0x80中断进入内核态*/ "movl %%eax, %0" /*最后将返回值放入retrun_Value中*/ :"=m"(return_Value) :"d"(dirName),"D"(mode) ); printf("%d\n",return_Value); return 0; }
图3 C代码中嵌入汇编代码实验效果
按照指定的的权限创建了一个新的new_dirAsm目录
第二部分
API:应用程序接口是一个函数定义,系统调用通过软中断向内核发出一个明确的请求。
系统调用:操作系统为用户态进程与硬件设备进行交互提供了一组接口。
当API中包含系统调用时,通过系统调用号进入相应的系统调用,然后使用软中断进入内核态。中断发生后会保护现场,将用户的当前栈顶地址,当时的状态字和cs:eip的值进行压栈。之后进入由用户态切换到内核态,处理完中断程序后还原现场,返回用户态。
通过使用API和C代码中嵌入式汇编代码两种方式实现系统调用,理解了系统调用的工作过程。
小市民 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
0 0
- 系统调用的工作机制
- 系统调用的工作机制
- 4.理解系统调用的工作机制
- Linux系统调用的工作机制
- 浅析linux系统函数调用的工作机制
- Linux系统调用的工作机制(上)
- 通过库函数API和C代码中嵌入汇编代码剖析系统调用的工作机制
- Linux内核分析之四——系统调用的工作机制
- Linux内核分析之系统调用工作机制简析
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- 例析Linux系统调用的机制
- 【备忘】SoapUI测试REST风格接口时的groovy script写法
- c:forEach varStatus属性
- SSH免密码互相登陆-搭建hadoop集群
- 获取数字签名
- trust zone之我见
- 系统调用的工作机制
- nmon分析文件各sheet含义
- 12c 模拟cdb的undo文件丢失
- 使用CodeWarrior出现Warning:Return expected
- SQL Server-字字珠玑,一纸详文,完全理解SERIALIZABLE最高隔离级别(基础系列收尾篇)
- 时间校验 与时间转化
- 设计模式---备忘录模式(C++实现)
- knn算法中关于k的取值
- 简谈高通Trustzone的实现