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

    1.学习到的新命令

    • dd: 删除光标所在行
    • i: 进入编辑模式
    • esc:进入命令模式
    • wq:写入文件并退出

    2.esp和ebp

    esp永远指向栈顶元素。不是指向没有数据的空地址。

    push时,先减四后赋值

    ebp永远指向栈底元素。他一般存储了上一个函数的ebp。

    进入函数中,先push ebp

    再mov ebp,esp 这时俩寄存器都指向保存的上个函数的ebp的值。

    离开函数时执行leave时,他的作用与上面的相反,相当于

    mov esp,ebp  让esp指向当前的栈底

    pop ebp 将栈顶(esp指向的内存)的值给ebp这样,就恢复了上个函数调用此函数至少得值,esp因为弹栈而加四,然后指向的是返回地址。

    随后执行ret,ret指令相当于

    pop eip 即将栈顶的值(esp指向的内容)复制给eip指令寄存器。esp+4。

    3.实验过程分析

    C程序

    int g(int x)
    {
    return x + 3;
    }
    
    int f(int x)
    {
        return g(x);
    }
    
    int main(void)
    {
        return f(8) + 1;
    }
    

    汇编代码

    汇编过程分析

    汇编程序也是从main开始执行,
    18 pushl %ebp
    19 movl %esp, %ebp
    将ebp内容压入栈,然后将esp内容赋值给ebp

    20 subl $4, %esp
    21 movl $13, (%esp)
    esp向下移动四个字节,,将13放在esp指定位置里,esp向下移动一个单位

    22 call f
    相当于
    pushl %eip(*)
    movl f %eip(*)
    将eip寄存器值即23行指令地址放入esp指向位置,esp减4,进入f函数,此时eip存放行号9指令地址

    9 pushl %ebp
    将ebp内容压入栈,此时ebp指向96

    10 movl %esp, %ebp
    将esp值赋值给ebp

    11 subl $4, %esp
    esp向下移动一个单位

    12 movl 8(%ebp), %eax
    将ebp内容加8放入eax寄存器中

    13 movl %eax, (%esp)
    将eax内容放入esp指向的地址中

    14 call g
    相当于
    pushl %eip(*)
    movl g %eip(*)
    将eip寄存器值即15行指令地址放入esp指向位置,esp减4,进入g函数,此时eip存放行号2指令地址

    2 pushl %ebp
    3 movl %esp, %ebp

    4 movl 8(%ebp), %eax
    5 addl $3, %eax
    6 popl %ebp
    ebp寄存器值加8即向上移两个单位,将13放入eax寄存器中,eax值再加3,栈顶的值放入ebp,而被迫值为84

    7 ret
    相当于
    popl %eip(*)
    栈顶值给eip并弹出

    15 leave
    相当于
    movl %ebp, %esp
    popl %ebp

    16 ret

    23 addl $1, %eax
    24 leave
    eax寄存器值加1

  • 相关阅读:
    将行政区域导入SQL SERVER
    wpf 使用Font-Awesome图标字体
    Visual Studio Code用户设置文件
    vue2+webpack 开发环境配置
    Bootstrap datepicker 在弹出窗体modal中不工作
    English Training Material
    FIJ Jobs – 2013/8/12
    English Training Material
    English Training Material
    位操作(求[a, b] 中二进制位为1的个数最多的数)
  • 原文地址:https://www.cnblogs.com/dyyblog/p/13812922.html
Copyright © 2011-2022 走看看