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

Posted Mccartney

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)相关的知识,希望对你有一定的参考价值。

使用库函数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代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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