第四课 初识系统调用
2016-04-29 22:22
120 查看
赵连讯 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”
本次课的名称:扒开系统调用的三层皮(上)
我将它理解为初步识别系统调用。
系统的调用的意义如下:
把用户从底层的硬件编程中解放出来(不必关注硬件特性)
极大的提高了系统的安全性(用户不能随意的进入到内核中,必须经过中断,间接的进入到内核。内核和应用空间分开了)
使用户程序具有可移植性(因为对外的函数接口是一致的,应用程序只调用此接口即可)
1. 第一层:应用层的libc提供的API函数。这些API函数虽然在应用层,但是他们不是随意的定义的。对外接口函数的形式一旦确定了,发布了,就不会随意的修改。否则使用libc的应用函数将无法承受。
libc对下使用int 0x80来实现系统调用
2.第二层:system_call系统调用函数。与0x80是对应的,是通过查表找到的系统调用函数。是traps_init函数注册的。
3.第三层:就是软件中断实现函数了。比如我们的fork函数,最终内核中的实现是sys_fork函数。
如果是一个函数调用,大家首先想到的是使用前面讲到的系统编译生成的汇编文件来代替。在同一个栈空间中使用压栈和出栈的方式,借用call来实现。
但是系统调用的汇编实现却是不同的。我们必须生成一个发送给内核的中断。幸好有产生软件中断的语句:
系统调用的中断号码是0x80。具体是哪一个系统调用函数使用eax来传递。 eax来传递的参数也叫做系统调用号。
此外,函数的入参还可使用ebx,ecx,edi等等六个寄存器来使用。
在本实验中我使用mkdir函数来修改汇编。
使用ebx和ecx作为mkdir的入参,mkdir的输出参数没有接收。
eax作为系统函数的函数号码等于十进制的39.
最后执行系统调用int 0x80即可。执行后,可生成test目录。
本次课的名称:扒开系统调用的三层皮(上)
我将它理解为初步识别系统调用。
系统调用
系统调用的实现的实质是软中断,而不是简单的函数调用。为什么这么做呢?系统的调用的意义如下:
把用户从底层的硬件编程中解放出来(不必关注硬件特性)
极大的提高了系统的安全性(用户不能随意的进入到内核中,必须经过中断,间接的进入到内核。内核和应用空间分开了)
使用户程序具有可移植性(因为对外的函数接口是一致的,应用程序只调用此接口即可)
三层皮
三层皮是那三层呢?1. 第一层:应用层的libc提供的API函数。这些API函数虽然在应用层,但是他们不是随意的定义的。对外接口函数的形式一旦确定了,发布了,就不会随意的修改。否则使用libc的应用函数将无法承受。
libc对下使用int 0x80来实现系统调用
2.第二层:system_call系统调用函数。与0x80是对应的,是通过查表找到的系统调用函数。是traps_init函数注册的。
3.第三层:就是软件中断实现函数了。比如我们的fork函数,最终内核中的实现是sys_fork函数。
系统调用与函数调用区别
系统调用和一般的函数调用是不同的。让我们从汇编语言实现的角度来理解两者的区别。如果是一个函数调用,大家首先想到的是使用前面讲到的系统编译生成的汇编文件来代替。在同一个栈空间中使用压栈和出栈的方式,借用call来实现。
但是系统调用的汇编实现却是不同的。我们必须生成一个发送给内核的中断。幸好有产生软件中断的语句:
int 0x80
系统调用的中断号码是0x80。具体是哪一个系统调用函数使用eax来传递。 eax来传递的参数也叫做系统调用号。
此外,函数的入参还可使用ebx,ecx,edi等等六个寄存器来使用。
实验过程
实验要求用汇编语言实现一段系统调用。在本实验中我使用mkdir函数来修改汇编。
库函数的调用方式
源代码如下:汇编语言调用方式
将系统调用改为汇编语言后,源代码如下:使用ebx和ecx作为mkdir的入参,mkdir的输出参数没有接收。
eax作为系统函数的函数号码等于十进制的39.
最后执行系统调用int 0x80即可。执行后,可生成test目录。
执行结果
执行后创建了test目录,是程序执行的结果。相关文章推荐
- 滑动窗口的最大值
- UVA 489 - Hangman Judge 未解决未解决未解决未解决
- Linux期末总结
- Linux内核学习总结(final)
- Asp.Net MVC3 简单入门详解过滤器Filter
- tomcat配置虚拟目录
- 1013 Problem M
- POJ 2243 Knight Moves(BFS)
- 最大序列和
- 文件操作
- 项目经理多年的经验之谈
- windows通讯端口初始化失败
- 工具类Log
- 使用KMS批量激活操作系统
- 删除ORacle 命名空间
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- 冲刺第六天
- 15.oracle的dump理解十五 SQL命令DUMP
- Corosync+Pacemaker+MySQL+DRBD(二) 推荐
- 14.oracle的dump理解十四 窥视内存