zoukankan      html  css  js  c++  java
  • Linux内核分析— —扒开系统调用的三层皮(下)

    课程主要内容有三点:

    1. 在MenuOS中通过添加代码增加自定义的系统调用命令
    2. 使用gdb跟踪调试内核
    3. 简单分析system_call代码了解系统调用在内核代码中的处理过程

    实验——分析system_call中断处理过程

    在MenuOS中添加上周所运用到的系统调用

    克隆并自动编译

     rm menu -rf 强制删除原menu文件

    git clone https://github.com/mengning/menu.git      从github中克隆

    cd menu

    在test.c文件中,添加代码如下:

    int Getpid(int argc ,char *argv)

    {

        pid_t pid;

        pid=getpid();

        printf("pid = %d ", pid);

        return 0;

    }

    int GetpidAsm(int argc ,char *argv)

    {

        pid_t pid;

        pid = getpid();

        asm volatile(

                "mov $0x24,%%eax "

                "int $0x80 "

                "mov %%eax,%0 "

                :"=m"(pid)

                );

        printf("pid = %d ",pid);

        return 0;

    }

    然后make rootfs即可完成功能的添加

     

    使用gdb跟踪系统调用内核函数sys_time

    使用gdb跟踪调试内核

    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 关于-s和-S选项的说明:
    另开一个shell窗口

    gdb
    (gdb)file linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表

    (gdb)target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行 加载符号表

     

    三、系统调用在内核代码中的处理过程

    系统调用在内核代码中的工作机制和初始化

      • SYSCALL_VECTOR:系统调用的中断向量
      • &system_call:汇编代码入口
      • 一执行int 0x80,系统直接跳转到system_call

    系统调用的处理过程可分成以下3步:

      (1)将处理机状态由用户态转为系统态。之后,由硬件和内核程序进行系统调用的一般性处理,即首先保护被中断进程的CPU环境,将处理机状态字PSW、程序计数器PC、系统调用号、用户找指针以及通用寄存器内容等压入堆栈,然后,将用户定义的参数传送到指定的地方保存起來。

      (2)分析系统调用类型,转入相应的系统调用处理子程序。为使不同的系统调用能方便地转向相应的系统调用处理子程序,在系统中配置了一张系统调用入口表。表中的每个表目都对应一条系统调用,其中包含该系统调用自带参数的数目、系统调用处理子程序的入口地址等。内核可利用系统调用号去查找该表,即可找到相应处理子程序的入口地址而转去执行它。

      (3)在系统调用处理子程序执行完后,恢复被中断的或设置新进程的CPU现场,然后返冋被中断进程或新进程,继续往下执行。

  • 相关阅读:
    线性代数复习向量空间线性相关向量组的秩
    证明:将n(n为2的幂)个点的位反转环划分为长为j(2的幂)的连续片段,这些片段都是次序等价的(分布式算法)
    vim命令小合集
    poj2240floyd算法
    visual studio打开文件所在目录
    5个0,4个1组成的字符串中,出现01或10的次数为4的不同字符串个数
    max spacing kclustering(类似kruskal最小生成树)并查集Debuging
    算法导论16.35huffman树的表示
    最优二叉查找树optimalBSTC++实现2
    算法导论16.37
  • 原文地址:https://www.cnblogs.com/20135213lhj/p/5325947.html
Copyright © 2011-2022 走看看