linux内核分析第四次实验
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux内核分析第四次实验相关的知识,希望对你有一定的参考价值。
实验步骤:
使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用。本次实验中我使用第20号系统调用getpid()函数,用于取得进程识别码。
-
C代码(getpid.c):
#include <unistd.h> #include <stdio.h> int main() { pid_t pid; pid = getpid(); printf("pid = %d \n",pid); return 0; }
- 编译及运行结果见下图:
-
嵌入汇编代码getpid_asm.c:
#include <unistd.h> #include <stdio.h> int main() { pid_t pid; pid = getpid(); asm volatile( "mov $0,%%ebx\n\t" //系统调用传递第一个参数使用ebx,因为这里没有传入参数所以是null "mov $0x14,%%eax\n\t" //使用%eax传递系统调用号20,用16进制表示为0x14 "int $0x80\n\t" //执行系统调用 "mov %%eax,%0\n\t" //将%0(即pid的返回值)放到%eax寄存器中 : "=m" (pid) ); printf("pid = %d \n",pid); return 0; }
- 编译及运行结果见下图:
实验总结:
系统调用是操作系统为用户态进程与硬件设备进行交互提供的一组接口,也是一种特殊的中断,可使用户态切换到内核态。当用户态进程调用一个系统调用时,CPU切换到内核态并开始执行一个内核函数。
以上是关于linux内核分析第四次实验的主要内容,如果未能解决你的问题,请参考以下文章