zoukankan      html  css  js  c++  java
  • 2019-2020-1 20199312《Linux内核原理与分析》第三周作业

    • 计算机的三大法宝:程序存储计算机、函数调用、中断

    • 堆栈的作用:记录函数调用框架、传递函数参数、保存返回值地址、提供函数内部局部便量的存储空间。

    • 堆栈相关的寄存器 ESP:堆栈指针,指向堆栈栈顶 EBP:基址指针,指向堆栈栈底

    • 堆栈向下增长的原因
      这个问题与虚拟地址空间的分配规则有关,每一个可执行C程序,从低地址到高地址依次是:text,data,bss,堆,栈,环境参数变量;其中堆和栈之间有很大的地址空间空闲着,在需要分配空间的时候,堆向上涨,栈往下涨

    • 函数调用 call指令经eip中吓一条指令的地址A保存在栈顶,设置eip指向被调用代码
      cs:eip总是指向下一条的指令地址
      顺序执行:总是指向地址联系的下一条指令 跳转和分支 测试:eip会会根据程序需要而修改。
      call:将当前cs:eip的值压入栈顶,cs:eip指向被调用函数的入口地址
      ret:从栈顶弹出原来保存在这里的cd:eip的值,放入sc:eip中

    call xxx
    执行call之前
    执行call时,cs:eip原来的值指向call下一条指令,该值被保存到栈顶,然后cs:ei的值指向xx的入口地址
    进入xxx
    第一条指令:pushl %ebp
    第二条指令:movl %esp,%ebp
    提出xxx
    movl %ebp, %esp
    popl $ebp
    -ret

    • 实验
    
    $ cd ~/LinuxKernel/linux-3.9.4
    $ rm -rf mykernel
    $ patch -p1 < ../mykernel_for_linux3.9.4sc.patch
    $ make allnoconfig
    $ make
    $ qemu -kernel arch/x86/boot/bzImage
    
    
    
    • 效果图

    • 查看文件

    查看mymain.c文件:

       vi mymain.c
    

    
    void __init my_start_kernel(void)
    {
        int i = 0;
        while(1)
        {
            i++;
            if(i%100000 == 0)
                printk(KERN_NOTICE "my_start_kernel here  %d 
    ",i);
                
        }
    }
    
    
    

    总结:

  • 相关阅读:
    java几种字符串反转
    iOS安全攻防(三):使用Reveal分析他人app
    信息与计算科学
    搜索框中“请输入搜索keyword”
    上传图片图像进行压缩后上传
    ExtractFileDir 与 ExtractFilePath 的差别
    java中接口的定义与实现
    《IT运维之道》
    Linux查看硬件信息,主板型号及内存硬件,驱动设备,查看设备,查看CPU。
    CentOS6.5 x86_64 配置Broadcom 43XX系列 无线网卡驱动
  • 原文地址:https://www.cnblogs.com/banpingcu/p/11604003.html
Copyright © 2011-2022 走看看