博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux内核分析第四次实验
阅读量:5159 次
发布时间:2019-06-13

本文共 864 字,大约阅读时间需要 2 分钟。

实验步骤:

 

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用。本次实验中我使用第20号系统调用getpid()函数,用于取得进程识别码。

  • C代码(getpid.c):

    #include 
    #include
    int main(){ pid_t pid; pid = getpid(); printf("pid = %d \n",pid); return 0;}
    • 编译及运行结果见下图:

 

  • 嵌入汇编代码getpid_asm.c:

    #include 
    #include
    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切换到内核态并开始执行一个内核函数。

转载于:https://www.cnblogs.com/20135118lpy/p/5297217.html

你可能感兴趣的文章
建立,查询二叉树 hdu 5444
查看>>
[Spring框架]Spring 事务管理基础入门总结.
查看>>
2017.3.24上午
查看>>
Python-常用模块及简单的案列
查看>>
LeetCode 159. Longest Substring with At Most Two Distinct Characters
查看>>
LeetCode Ones and Zeroes
查看>>
基本算法概论
查看>>
jquery动态移除/增加onclick属性详解
查看>>
JavaScript---Promise
查看>>
暖暖的感动
查看>>
Java中的日期和时间
查看>>
Django基于admin的stark组件创建(一)
查看>>
PAT L2-016 愿天下有情人都是失散多年的兄妹
查看>>
抛弃IIS,利用FastCGI让Asp.net与Nginx在一起
查看>>
C. Tanya and Toys_模拟
查看>>
springboot jar包运行中获取资源文件
查看>>
基于FPGA实现的高速串行交换模块实现方法研究
查看>>
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>