Linux内核分析实验4——系统调用
2017-03-12 23:03
232 查看
CPU工作状态分为内核态与用户态,他们的执行的指令的权限不同,用户态程序不能访问0xb00000以后的的内存(虚拟内存)
系统内核会提供一些系统调用,它们执行一些底层的,有关硬件的功能,出于安全与兼容的考虑,用户态程序无法访问硬件,需要通过系统调用来实现一些功能,如获取当前事件,在屏幕上显示等。
操作系统提供了一些系统api以供程序调用,一个系统api可能调用多个系统调用,一个系统调用也可能有多个系统api使用。
我们在程序中可以调用系统api实现某些功能,也可以直接使用系统调用
调用api:
使用系统调用
使用系统调用,需要使用汇编,用法解释如下
“`
“`
系统内核会提供一些系统调用,它们执行一些底层的,有关硬件的功能,出于安全与兼容的考虑,用户态程序无法访问硬件,需要通过系统调用来实现一些功能,如获取当前事件,在屏幕上显示等。
操作系统提供了一些系统api以供程序调用,一个系统api可能调用多个系统调用,一个系统调用也可能有多个系统api使用。
我们在程序中可以调用系统api实现某些功能,也可以直接使用系统调用
调用api:
#include <time.h> int main() { time_t tt; struct tm *t; tt=time(); t=localtime(&tt); printf("time:%d:%d:%d:%d:%d:%d\n",t->tm_year+1900, t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); return 0; }
使用系统调用
time_t tt; struct tm *t; asm volatile( "mov $0,%%ebx\n\t" "mov $0xd,%%eax\n\t" "int $0x80\n\t" "mov %%eax,%0\n\t" : "=m" (tt) ); t = localtime(&tt); printf("time:%d:%d:%d:%d:%d:%d\n",t->tm_year+1900, t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); return 0;
使用系统调用,需要使用汇编,用法解释如下
“`
/* 设置ebx为0,ebx为系统调用的第一个参数,如果有第二个第三个参数,以此存放在ecx,edx,等通用寄存器中,若参数太多,最后一个存放多余参数的指针 */ "mov $0,%%ebx\n\t" /* eax为系统调用号,即告诉系统要调用那个系统调用,0xd为获取当前时间 */ "mov $0xd,%%eax\n\t" /* 调用0x80中断,即开始系统调用 */ "int $0x80\n\t" /* 系统调用的结果会存放在eax中 */ "mov %%eax,%0\n\t" : "=m" (tt)
“`
相关文章推荐
- Linux内核分析:实验五--使用GDB跟踪系统调用执行过程
- Linux内核分析:实验四--使用嵌入汇编系统调用
- linux内核分析笔记----系统调用
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux系统调用的实现机制分析
- linux内核mount系统调用源码分析 http://blog.csdn.net/wugj03/article/details/41958029
- Linux内核分析(四)系统调用,用户态及内核态
- Linux内核分析第四周学习总结:扒开系统调用的三层皮(上)
- Linux内核学习之四--进程、进程调度、系统调用、proc文件系统和内核异常分析
- linux内核中断、异常、系统调用的分析以及实践
- Linux系统调用详解(实现机制分析)--linux内核剖析(六)
- Linux内核分析课程7_execve()函数对应的系统调用处理过程
- linux内核分析笔记----系统调用
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux系统调用的实现机制分析
- Linux内核分析 笔记四 系统调用的三个层次 ——by王玥
- linux内核文件IO的系统调用实现分析
- 【Linux OS】(实验)重建Linux内核和添加系统调用
- linux内核mount系统调用源码分析
- Linux内核分析(六)----字符设备控制方法实现|揭秘系统调用本质
- linux内核分析第四周-使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- Linux内核分析第四周学习总结——系统调用的工作机制