码迷,mamicode.com
首页 > Windows程序 > 详细

实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

时间:2016-03-19 22:45:10      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:

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

攥写人:杨光  学号:20135233

( *原创作品转载请注明出处*)

( 学习课程:《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 

 

实验要求:

  1. 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl

  2. 参考视频中的方式使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,推荐在实验楼Linux虚拟机环境下完成实验。

实验过程:


首先,选择使用的系统调用:我选择的是20号 getpid

技术分享

 

然后,进入实验楼,编写c语言代码

技术分享

 

保存,并用gcc编译  用./运行

技术分享

技术分享

运行成功,之后再修改yangguang.c,改为嵌入式汇编语句

技术分享

保存并退出,之后使用gcc编译运行

技术分享

 

知识点总结:

***用户通过库函数与系统调用联系起来。

***内核态

在高执行级别下,代码可以执行特权指令,访问任意的物理地址

***用户态:

代码的掌控范围受到限制。

intel x86 CPU有四个权限分级,0-3。Linux只取两种,0是内核态,3是用户态
区分权限级别使得系统更加稳定。

***系统调用的意义:

操作系统为用户态进程与硬件设备进行交互提供了一组接口,就是系统调用。

- 远离底层硬件编程
- 安全性
- 可移植性

***API - 应用编程接口

与系统调用区别:

- API只是一个函数定义
- 系统调用是通过软中断向内核发出一个明确的请求。

一般每个系统调用对应一个封装例程,库再用这些封装例程定义出用户的API,方便用户使用。

API与系统调用不是一一对应的

API可以:
- 直接提供用户态服务
- 一个单独的API可能调用几个系统调用
- 不同的API可能调用了同一个系统调用

返回值:

 - 大部分封装例程返回一个整数
 - -1表示失败,不能满足请求 
 - errno 特定出错码

3.所谓“扒开系统调用的三层皮”

  • API(xyz)
  • 中断向量(system_call)
  • 中断服务程序(sys_xyz)

API xyz 与sys_xyz是以系统调用号相连的

 

实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

标签:

原文地址:http://www.cnblogs.com/yg137565645/p/5296445.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!