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 \n",i);
            
    }
}

总结:

猜你喜欢

转载自www.cnblogs.com/banpingcu/p/11604003.html
今日推荐