Linux内核及分析 第四周 扒开系统调用的三层皮(上)

实验过程

  1. 选择20号系统调用getpid(取得进程识别码)
  2. 在网上查询getpid函数的C语言代码以及其嵌入式汇编语句

    C语言代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    int main(int argc, const char *argv[])
    {
        pid_t tt;
        tt = getpid();
        printf("%u\n", tt);
        return 0;
    }
    

    嵌入式汇编语句:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    int main(int argc, const char *argv[])
    {
        pid_t tt;
        asm volatile(
        "mov $0x14, %%eax\n\t"
        "int $0x80\n\t"
        "mov %%eax, %0\n\t"
        :"=m" (tt)
                );
        printf("%u\n", tt);
        return 0;
    }
    
  3. 进入实验楼打开XFCE,在cd Code目录下输入指令: vi getpid.c;新建并打开getpid.c文件,在VI中输入在网上查阅的实现getpid的函数代码后,保存并退出。
  4. 再用gcc将该函数代码进行编译。通过输入指令./getpid即可得出目前进程号为:29895

5.修改getpid.c,改为嵌入式汇编语句,保存并退出后,使用以下命令gcc getpid -o getpid.c -m32编译

6.使用以下命令 ./getpid 运行得到目前的进程号为11926

实验总结

1. 系统调用的三层皮

1.API(xyz)

2.中断向量(system_call)

3.中断服务程序(sys_xyz)

2. 内嵌汇编调用system call

1.系统调用号放在eax中。

2.系统调用的参数,按照顺序分别放在ebx、ecx、edx、esi、edi和ebp中

3.返回值使用eax传递

作者: 王雪铖

原创作品转载请注明出处

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

时间: 2024-10-27 00:14:18

Linux内核及分析 第四周 扒开系统调用的三层皮(上)的相关文章

20135327郭皓--Linux内核分析第四周 扒开系统调用的三层皮(上)

Linux内核分析第四周 扒开系统调用的三层皮(上) 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核态和中断 用户态:当进程在执行用户自己的代码时,则称其处于用户态,即此时处理器在特权级最低的(3级)用户代码中运行. 内核态:当一个进程执行系统调用而陷入内核代码中执行时,我们就称进程处于内核态,此时处理器处于特权级最高的(0级)内核代码中执行. PS:CPU指令

第四周 扒开系统调用的三层皮(上)

用户态,内核态和中断 和系统调用打交道的方式:通过库函数,把系统调用给封装起来 用户态vs内核态: 一般现代CPU都有几种不同的指令执行级别 在高级别的状态下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别对应着内核态 在相应的低级别执行状态下,代码的掌控范围会受到限制,只能在对应级别允许的范围内活动 为什么有权限级别的划分:为了防止系统崩溃以及恶意代码的入侵,通过划分权限级别来让系统更稳定 举例:Intel x86 CPU有四种不同的执行级别0-3,Linux只使用了其中的0级和

第四周—扒开系统调用的“三层皮”

[洪韶武 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ]  第四周 扒开系统调用的“三层皮” 一.本周学习内容总结   1.系统调用的“三层皮” xyz函数—API systemcall—中断向量 sysxyz—中断服务程序 2.系统调用的意义及API与系统调用的关系 (1)系统调用的意义: 把用户从底层的硬件编程中解放出来 极大提高了系统安全性 使用户程序具有可移植性 (2)API

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

[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK FOUR(3.14——3.20)扒开系统调用的“三层皮” SECTION 1 用户态.内核态和中断处理过程 1.用户态.内核态区别 在高级别的状态下,代码可以执行特权指令,访问任意的物理地址: 在相应的低级别执行状态下,代码的掌控范围会受到限制. 为什么会有这种级别划分? 没有访问权限划分容易使得系统混乱(毕竟普通程序

20135201李辰希 《Linux内核分析》第四周 扒开系统调用的“三层皮”

李辰希无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核态和中断处理过程 1.我们与系统调用打交道是通过库函数的方式 2.一般现代CPU都有几种不同的指令执行级别 因为如果所有程序员写的代码都可以有特权指令的话,系统就会很容易崩溃. 3.区别: 在高级别的状态下,代码可以执行特权指令,访问任意的物理地址. 在相应的低级别执行状态下,代码的掌控范围会受到限制. Intel x86 CPU有四

《Linux内核分析》第四周笔记 扒开系统调用的三层皮(上)

扒开系统调用的三层皮(上) 一.用户态.内核态和中断 库函数将系统调用封装起来. 1.什么是用户态和内核态 一般现代CPU都有几种不同的指令执行级别. 在高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态. 而在相应的低级别执行状态下(用户态),代码的掌控范围会受到限制.只能在对应级别允许的范围内活动.系统容易崩溃. 在intel X86CPU有四种不同的执行级别0,1,2,3,linux只使用了0级和3级分别来表示内核态和用户态. 2.在linux内核代码

实验五:扒开系统调用的三层皮(下)

实验五:扒开系统调用的三层皮(下) 王朝宪20135114 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.给MenuOS增加time和time-asm命令 1. 通过内核的方式(跟踪调试系统调用)来理解并使用系统调用. rm menu -rf //强制删除当前menu git clone http://github.com/mengning/menu.git //重新克隆新版本的m

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

马悦+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核态和中断处理过程 1.用户通过库函数与系统调用联系起来. 2.在高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态.而在相应的低级别执行状态下代码的掌控范围受到限制.只能在对应级别允许的范围内活动. 3.intel x86 CPU有四种不同的执行级别0-3.Linux只取两种,0级

扒开系统调用的三层皮

张潇月<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 通过库函数与系统调用沟通. 用户态和内核态:高的执行级别下,代码可以执行特权指令,访问任意物理地址,这就是内核态.低级别的就是用户态. 为什么要有权限分级?让操作系统更加稳定,防止程序员的用户态代码使系统崩溃. intel x86 CPU上有四种执行指令的级别0-3,Linux只使用两种,0是内核态,3是用户态. 如何区分用户态和内核态?在内核态时我们可以访