Linux 系统调用机制(上)
来源:互联网 发布:中国象棋软件哪个好使 编辑:程序博客网 时间:2024/06/05 15:31
内容说明
本次的内容,是一次 MOOC 课程的作业。具体的,是使用汇编对 Linux 系统调用部分进行模拟实现,从而更加直观的验证 Linux 系统的基本机制。作业声明
qianyizhou17 + 原创作品转载请注明出处 + 《Linux 内核分析》MOOC 课程 http://mooc.study.163.com/course/USTC-1000029000实验准备
1 本次实验并没有使用 MOOC 课程上提供的实验楼的环境,而是自行搭建了 64Bit Ubuntu 虚拟机。
2 MAC 端的虚拟机使用 VMware 还是有些不够好用,又转回了 parallel,终于共享目录和复制/粘贴都好用了。
3 本次试验使用了 Ubuntu 16.04,环境搭建和软件安装部分,可以参照上一篇博客的环境搭建部分。实验操作
1 按照要求,从系统调用号列表中,选取getpid 进行试验。该 API 对应的系统调用号为 0x1D。该函数没有入参,仅使用 eax 传递系统调用号 0x1D 即可,系统调用的返回值仍然使用 eax 传出。
2 代码准备
#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(int argc, const char *argv[]){ /* * normal system call */ pid_t pid_get = getpid(); printf( "pid: %d\n", pid_get ); /* * asm system call */ pid_t pid_asm; asm volatile ( "mov $0, %%ebx\n\t" "mov $0x14, %%eax\n\t" "int $0x80\n\t" "mov %%eax, %0\n\t" : "=m" (pid_asm) ); printf( "pid_asm: %d\n", pid_asm ); return 0;}
3 编译
$ gcc getpid.c -Wall -m32 -o get_pid
4 执行与输出结构
$./get_pidpid: 14819pid_asm: 14819
- 总结
1 Linux 系统分为用户态和内核态,而中断响应,便是用户态进入内核态的一种常见方式
2 系统调用便是一种特殊的中断
3 用户空间进行系统调用时:
1)进行系统调用(getpid)时,首先会触发一个中断向量号为 0x80 的系统中断
2)该中断对应的中断处理函数便是 system_call,从而进入了内核态
3)通过寄存器传递的系统调用号——即对应了本例中的 0x14,进一步定位到了 system_call 下的中断服务程序 sys_getpid
4)逐层返回,从而完成系统调用,并返回结果(通过 eax)
0 0
- Linux 系统调用机制(上)
- Linux系统调用的工作机制(上)
- Linux 系统调用机制(下)
- Linux内核的系统调用(上)
- linux系统调用机制分析
- Linux 系统调用实现机制
- linux中的系统调用机制
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- 例析Linux系统调用的机制
- Linux系统调用的实现机制分析
- Linux系统调用的实现机制分析
- Django-拆分model和view
- HDU 5974 A Simple Math Problem(转化解方程)
- 字节流的缓冲区(复制MP3)
- 21天精通java基础之Day16线程
- Linux
- Linux 系统调用机制(上)
- caffe安装教程之WIN7无GPU绝对能安装成功的简单版教程
- MySQL中的int
- RealSense技术在SR300摄像头上的应用
- MySQL数据库基础语句操作整理
- 华为OJ训练之0008-161230-输出链表倒数第k个数字
- bzoj 2693: jzptab (反演)
- Eclipse使用Maven创建项目时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quick
- 标准I/O