扒开系统调用的三层皮(上)
来源:互联网 发布:sql查询语句视频教程 编辑:程序博客网 时间:2024/05/17 18:02
一、系统调用机制
系统调用的机制是靠软件中断实现的,首先,用户程序为系统调用设置参数。其中一个参数是系统调用编号。参数设置完成后,程序执行“系统调用”指令。x86系统上的软中断由int产生。这个指令会导致一个异常:产生一个事件,这个事件会致使处理器切换到内核态并跳转到一个新的地址,并开始执行那里的异常处理程序。此时的异常处理程序实际上就是系统调用处理程序,新地址的指令会保存程序的状态,计算出应该调用哪个系统调用,调用内核中实现那个系统调用的函数,恢复用户程序状态,然后将控制权返还给用户程序,每个系统调用被赋予一个系统调用号,系统调用号是通过eax寄存器传递给内核的。除了系统调用号以外,大部分系统调用都还需要一些外部的参数输人。
二、实验
1、用c语言来创建得到当前的进程号(调用API)
直接调用getpid函数,即可得到当前进程号。
2、用汇编来调用对应的系统调用
汇编第一句:把系统调用号14赋给eax寄存器,通过系统调用号来进行调用。
汇编第二句:执行eax寄存器中所对应的系统调用。
汇编第三局:将结果通过eax寄存器传给b。
最后将进程id打印出来。
3、结果
三、总结
首先我们需要在用户态时将系统调用号放入到寄存器eax中,再由指令int 0x80进行系统调用,然后进入到内核态,以我的实验为例,在内核态就会由sys_getpid函数来完成相关的功能,并将返回值返回到寄存器eax中,然后退出内核态系统调用,再退出内核态返回到用户态。
0 0
- 第四讲、扒开系统调用的三层皮(上)
- 扒开系统调用的三层皮(上)
- 扒开系统调用三层皮(二)
- 扒开系统调用的三层皮(一)
- 《Linux内核分析》(四)——扒开系统调用的三层皮(上)
- Linux内核分析——扒开系统调用的三层皮(上)
- Linux系统调用-扒开系统调用的三层皮(下)
- System Call 扒开系统调用的三层皮[未完待续~]
- Linux内核作业之扒开系统调用的三层皮(下)
- Linux内核分析——扒开系统调用的三层皮(下)
- Linux内核分析05-扒开系统调用的三层皮(下)
- Linux内核分析4:扒开系统调用三层皮
- 系统调用的三层皮
- Linux内核的系统调用(上)
- Linux系统调用的“三层皮”:API,中断服务程序,内核服务程序
- Linux系统调用的工作机制(上)
- tcp socket上的listen系统调用
- Web系统的三层结构
- MacOS无法登录App Store修复
- 学习过程
- C语言之整型数据类型
- Linux下防火墙的命令操作
- DS1302蓝桥杯官方驱动
- 扒开系统调用的三层皮(上)
- 链表之K逆序
- 生成二维码名片
- 数据结构之二叉树的实现
- Pod install 过程中遇到- Use the `$(inherited)` flag, or
- 给IT新人的15个建议:程序员的辛酸反省与总结!
- Activity管理类,随时随地退出应用程序
- linux gz 解压缩
- Linux的权限管理