黄胤凯   原创作品转载请注明出处   《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

一、视频学习

1.系统调用的三层皮:xyz    system_call    sys_xyz

对应的是API,中断向量对应的中断服务程序,系统调用服务程序。

API:应用编程接口

它与系统调用的关系:API可能直接提供用户态的服务,不是一个API都有与之相对应的系统调用。

2.中断处理,用户态及内核态

通过cs:eip的值判断代码段是在用户态还是内核态

中断处理是一种由用户态进入内核态的方式(系统调用也可以理解为是一种中断)

中断发生后,首先要保存现场,将数值压栈,保存到相应的寄存器中,然后响应中断,将数值弹栈,恢复现场。

二、使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

  • 实验报告

  • 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl 参考视频中的方式使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

  • 博客内容的具体要求如下:

    1. 题目自拟,内容围绕系统调用的工作机制进行,博客中需要使用实验截图

    2. 博客内容中需要仔细分析汇编代码调用系统调用的工作过程,特别是参数的传递的方式等。

    3. 总结部分需要阐明自己对“系统调用的工作机制”的理解。
  • 本次实验选择了2号调用fork调用来做实验:fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID

用实验楼的虚拟机打开shell

Cd Code
Vi forktest.c
Gcc forktest.c -o forktest.o -m32
./forktest.o

fork.c代码如下

#include <unistd.h>
#include <stdio.h>
int main ()
{pid_t fpid;int count = 0;fpid = fork();if (fpid < 0)printf("error in fork!");else if (fpid == 0) {printf("i am the child process, my process id is %d\n",getpid());count++;}else {printf("i am the parent process, my process id is %d\n",getpid());count++;}printf("count: %d\n",count);return 0;
}

 运行结果见截图 

  • 嵌入式汇编代码的执行,fork-asm.c源代码如下(参数的传递方式见注释):
#include <unistd.h>
#include <stdio.h>
int main ()
{pid_t fpid;int count = 0;
asm volatile ("mov $0, %%ebx\n\t"       "mov $0x2, %%eax\n\t"    // 将fork的系统调用号0x2赋值给eax"int $0x80\n\t"          // 通过0x80中断向量,执行系统调用"mov %%eax, %0\n\t"      // 系统返回的pid号默认储存在eax中: "=m" (fpid)            // 输出操作数0为内存中的fpid。);
if (fpid < 0) printf("error in fork!"); else if (fpid == 0) { printf("i am the child process, my process id is %d\n",getpid()); count++; } else { printf("i am the parent process, my process id is %d\n",getpid()); count++; } printf("count: %d\n",count); return 0; }

运行结果见截图

转载于:https://www.cnblogs.com/20132109HKK/p/5295680.html

《Linux内核分析》 第四节 扒开系统调用的三层皮(上)相关推荐

  1. 《Linux内核分析》 第四节 扒开系统调用的三层皮(上)

    <Linux内核分析> 第四节 扒开系统调用的三层皮(上) 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com ...

  2. LINUX内核分析第四周——扒开系统调用的三层皮

    LINUX内核分析第四周--扒开系统调用的三层皮 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

  3. 第四周—扒开系统调用的“三层皮”

    [洪韶武 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ]  第四周 扒开系统 ...

  4. 作业4:扒开系统调用的三层皮(上) 20135115臧文君

    扒开系统调用的三层皮(上) 注:作者:臧文君,原创作品转载请注明出处,<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000 ...

  5. linux内核分析——扒开系统调用的三层皮(上)

    20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 系统调用 ...

  6. 《Linux内核分析》 第一节 计算机是如何工作的

    第一节 计算机是如何工作的 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 ...

  7. Linux内核分析(四)之“暗流涌动”

    一.拨云见日 身为程序员,我们绕不开系统调用,但是我们往往都是通过一个"中间人"--库函数与其打交道. 我们调用一个库函数也许看起来非常简单,但是其真正的实现细节,并非我们看起来那 ...

  8. 《Linux内核分析》 第二节 操作系统是如何工作的

    Linux内核分析 第二周 操作系统是如何工作的 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/UST ...

  9. 扒开系统调用的三层皮(下)

    5234+ 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.给MenuO ...

最新文章

  1. 利用python爬虫与数据分析,打造最强玩法,轻松成为大神级玩家!
  2. iconfont 在vue项目中的应用(icon-component组件)
  3. python 贴吧自动回复机-Python实现微信自动回复机器人详细教程
  4. Codeforces 1103
  5. addEntriesFromDictionary用法
  6. MySQL的单表索引优化案例
  7. SQL Server---触发
  8. wireshark远程抓包
  9. 兴利调节matlab编程,水利计算之兴利调节计算.ppt
  10. Android反编译分析工具
  11. 杨森翔的书法(对联、斗方、圆光)
  12. 中国网络游戏发展简史
  13. android 导入 苹果手机,安卓手机文件怎么传到苹果手机
  14. 数学建模之常见的优化模型
  15. android文字识别apk,照片转文字识别提取apk
  16. Android 子线程 UI 操作真的不可以?
  17. 薅羊毛算副业吗?薅羊毛到底是怎么赚钱的?
  18. 好看的个人网站源码_新手想建个人网站,都要注意哪些关于自助建站源码的坑?...
  19. python做cae库,基于Python的CAE自动后处理开发
  20. Kademlia算法 理解 总结

热门文章

  1. [原创软件]体验组批量加分工具
  2. 一元操作符——递增和递减操作符(第一次写博客,紧张.)
  3. [翻译] ABCIntroView
  4. 网页 添加QQ/MSN/旺旺 在线聊天代码
  5. linux 安装软件
  6. java 权限url权限_SpringBootSecurity学习(11)网页版登录之URL动态权限
  7. Matlab xlim ylim zlim函数
  8. mysql timestamp 并发_MySQL 实现 EF Code First TimeStamp/RowVersion 并发控制
  9. 我是如何使用git把本地代码上传到CODECHINA上的,值得借鉴
  10. 面试用涉及到的jvm常见的面试题(一)