zoukankan      html  css  js  c++  java
  • Linux内核分析——分析system_call中断处理过程

    万子惠 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

    我选择的是getuid:

    int Getuid(int argc ,char *argv)
    {
        pid_t uu;
        uu=getuid();
        printf("uu = %d 
    ", uu);
        return 0;
    }
    
    
    int GetuidAsm(int argc ,char *argv)
    {
    
        pid_t uu;
        uu = getuid();
        asm volatile(
                "mov $0x24,%%eax
    	" 
                "int $0x80
    	"
                "mov %%eax,%0
    	"
                :"=m"(uu)
                );
        printf("uu = %d 
    ",uu);
        return 0;
    
    }
    

    1)先更新menu

    2)在main函数中添加新的MenuConfig并添加相应函数

    3)之后进入menu中使用make rootfs=>自动编译生成根文件系统【还自动启动起来~】

    然后我们开始调试:
    1)qemu -kernel linux-3.18.6/arch/x86/bzImage -initrd rootfs.img -s -S

    2)gdb

    3)file linux-3.18.6/vmlinux

    4)target remote:1234

    5)之后设置断点:
    这个函数我好像和表里不一样 我设置了两个sys_getuid的断点
    可以看到运行停在了这里(被压到背后的那个黑色部分)

    6)之后使用s进行单步的运行,在使用finish运行到最后,这时候
    在system_call设置断点,看到这是一段在entry32.s的特殊汇编代码。

    从system_call开始到iret结束过程流程图

    system_call的处理过程中:

    xyz<=系统调用号=>sys_xyz()
    int 0x80<=中断向量=>system_call
  • 相关阅读:
    JSONObject处理java.util.Date
    JSON lib 里JsonConfig详解
    Android编程获取手机的IMEI
    Toast用法
    JMM内存管理
    Users is not mapped(Hibernate实体类采用注解)
    指针小结(不定期更新)
    这个博客几乎不用了,转到csdn
    2013暑期在家(1)
    用户空间与内核空间,进程上下文与中断上下文[总结]
  • 原文地址:https://www.cnblogs.com/midori/p/5311872.html
Copyright © 2011-2022 走看看