实验部分

  • 根据系统调用表,选取一个系统调用。我选得是mkdir这个系统调用,其系统调用号为39,即0x27

  • 由于mkdir函数的原型为
    int mkdir (const char *filename, mode_t mode)

    所以根据其原型编写一下代码:

    #include <stdio.h>

    #include <sys/types.h>

    #include <sys/stat.h>

    int main()

    {

    const  char *ch = "test"; //创建的文件夹名称

    mode_t mode = 0700;        //创建的文件夹的权限

    int flag = 0;        //是否创建成功新的文件夹的标识符

    flag = mkdir(ch,mode);    //调用mkdir

    if(flag==0)                //flag=0则创建成功,否则失败

    {

    printf("succeed");

    }

    else

    printf("error");

    return 0;

    }

  • mkdir.c的运行结果如下:

  • 当运行完mkdir可执行文件时,产生了新的文件夹test。

  • 改编成会变代码调用

    #include <stdio.h>

    #include <sys/types.h>

    #include <sys/stat.h>

    int main()

    {

    char *ch="test-asm"; //创建文件夹的名称

    mode_t mode=S_IRWXU;  //创建新的文件夹的权限

    int flag=0;            //标识符

    asm volatile(

    "mov $0x27,%%eax\n\t"    //系统调用号赋给eax寄存器

    "mov %1,%%ebx\n\t"        //将文件夹的名称赋给ebx寄存器

    "mov %2,%%ecx\n\t"        //将文件夹的权限赋给ecx寄存器

    "int $0x80\n\t"            //开启中断,执行mkdir系统调用

    "mov %%eax,%0\n\t"        //将返回值赋给flag

    :"=m"(flag)                //输出变量flag

    :"d"(ch),"D"(mode)        //输入变量ch与mode

    );

    if(flag==0)            //flag=0则创建成功,否则失败

    printf("succeed");

    else

    printf("error");

    return 0;

    }

  • 结果如下图:

总结

1.系统调用的三层皮:xyz    system_call    sys_xyz

对应的是API,中断向量对应的中断服务程序,系统调用服务程序。

API:应用编程接口

它与系统调用的关系:API可能直接提供用户态的服务,不是一个API都有与之相对应的系统调用。

2.中断处理,用户态及内核态

通过cs:eip的值判断代码段是在用户态还是内核态

中断处理是一种由用户态进入内核态的方式(系统调用也可以理解为是一种中断)

中断发生后,首先要保存现场

3.系统调用简单点说,就是通过设置输入输出变量,令其存在于ebx等寄存器中,而后将系统调用号赋给eax寄存器,最后通过int 0x80来进行中断,从而开始所选择的系统调用。

若有返回值,则将返回值传至eax寄存器中,我们便可以利用返回值来给出一定的结论(如操作成功或失败)。

注:

姓名:林涵锦

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

Linux内核分析— —扒开系统调用的三层皮(上)的更多相关文章

  1. linux内核分析——扒开系统调用的三层皮(上)

    20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 系统调用 ...

  2. linux内核分析——扒开系统调用的三层皮

    万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验部分 选择2 ...

  3. linux内核分析——扒开系统调用的三层皮(下)

    20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 实验 ...

  4. Linux内核分析— —扒开系统调用的三层皮(下)

    课程主要内容有三点: 在MenuOS中通过添加代码增加自定义的系统调用命令 使用gdb跟踪调试内核 简单分析system_call代码了解系统调用在内核代码中的处理过程 实验——分析system_ca ...

  5. 20135239 益西拉姆 linux内核分析 扒开系统调用的三层皮(下)

    一. 给MenuOS增加time-asm命令 代码解释 1.-rf:强制删除 2.clone :重新克隆 3.time-asm:显示系统时间的汇编形式 给MenuOS增加time和time-asm命令 ...

  6. linux 内核 第四周 扒开系统调用的三层皮 上

    姬梦馨 原创作品 http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核态和中断处理过程 用户通过库函数与系统调用联系起来:库函数帮我们把系 ...

  7. 《Linux内核分析》第四周 扒开系统调用的“三层皮”

    [刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK FOUR( ...

  8. 《Linux内核分析》第五周 扒开系统调用的三层皮(下)

    [刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK FIVE( ...

  9. LINUX内核分析第五周学习总结——扒开系统调用的“三层皮”(下)

    LINUX内核分析第五周学习总结--扒开系统调用的"三层皮"(下) 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>M ...

随机推荐

  1. 【Excel】SUMIF函数的兼容性

    兼容性非常强的两个函数 SUMIF() 说兼容性,当然得说SUMIF了. 来,我们先举个例子. 现有一个表格,算起来只有"科目划分"."发生额"两列内容,但是折 ...

  2. switch选择结构

    switch( 表达式 )//表达式可以使用byte,short,int,char { case 值1: 逻辑语句: break;//跳出switch语句 case 值2: 逻辑语句; break; ...

  3. 英语词性系列-B01-名词

    诗Poem 诫子书 [作者]诸葛亮 [朝代]三国时期 夫君子之行,静以修身,俭以养德.非淡泊无以明志,非宁静无以致远.夫学须静也,才须学也,非学无以广才,非志无以成学.淫慢则不能励精,险躁则不能治性. ...

  4. oracle的order by排序中空字符串处理方法

    1.缺省处理 Oracle在Order by 时缺省认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前 2.使用nvl函数 nvl函数可以将输入参数为空时转换为一特定值,如 ...

  5. 寒假集训——搜索 D - Cubes for Masha

    #include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h&g ...

  6. C#异步编程のawait和async关键字来写异步程序

    一.await和async关键字 .Net平台不断推出了新的异步编程模型,在.net4.5中加入了关键字await和async,顾名思义,await是指方法执行可等待,即可挂起直到有结果(不是必须立即 ...

  7. M100 (0)开发

    [SDCC 2015现场]大疆Paul Yang:多旋翼飞行器的未来就是机器人的未来 http://www.csdn.net/article/2015-11-19/2826268 开发官网 https ...

  8. Android学习之基础知识五—创建自定义控件

    下面是控件和布局的继承关系: 从上面我们看到: 1.所有控件都是直接或间接继承View,所有的布局都是直接或间接继承ViewGroup 2.View是Android中最基本的UI组件,各种组件其实就是 ...

  9. Luogu P2661 信息传递

    传送门 一眼就能看出来是个并查集 但是并不会写... 看了一下题解说是并查集求最小环qwq 所以,每次加入第i个小同学,判断如果他要告诉的小同学k最后会告诉他(也就是转回来了), 就说明出现了一个环, ...

  10. Omi框架学习之旅 - 生命周期 及原理说明

    生命周期 name avatars company constructor 构造函数 new的时候 install 初始化安装,这可以拿到用户传进的data进行处理 实例化 installed 安装完 ...