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

    实验过程

    创建一个main.c文件,并用vim编辑写入内容

    用vim写入的内容是

    并用gcc –S –o main.s main.c -m32命令编译成汇编代码结果如下:




    代码中堆栈的变化:
    - 一开始ebp和esp都指向标号为0的栈底,先看main函数"push1 %ebp",这是把ebp存储器的值压栈,将ebp寄存器的值标号0放到标号为1或者地址减4的地方.
    - eip寄存器自动加1,执行move1 %esp,%ebp,将ebp寄存器也指向标号1的位置。
    - eip寄存器自动加1, 然后subl $4,%esp,esp寄存器标号加1,地址减4,栈空间没有变化。
    - eip寄存器自动加1,执行“movl $3,(%esp)”,将立即数3放入esp寄存器指向标号为2的位置,寄存器没变化,堆栈内容发生了变化。
    - eip寄存器自动加1,执行call f,call指令相当于执行push1 %eip() movl f %eip().执行call时,eip寄存器自动加1,加1后的寄存器的村压入了标号为3的的位置然后将f函数的第一条命令的行号放入eip寄存器中。
    然后另外2个函数依此类似,就不一一介绍了,另外,有几个特殊的指令等价于普通的指令。
    - call: pushl %eip
    movl $0×12345,%eip
    - enter: pushl %ebp
    movl %esp,%ebp
    - leave: movl %ebp,%esp
    popl %ebp
    - ret: popl %eip(*)

    ---恢复内容结束---

  • 相关阅读:
    ecshop学习入门
    php跳转页面代码
    PHP验证登录用户名和密码
    使用self关键字调用类体中的静态成员
    PHP中读取文件的几个方法
    MVC5 Entity Framework学习之更新相关数据
    global.asax文件的应用
    DbSet<TEntity> 类
    IDisposable接口详解
    bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化
  • 原文地址:https://www.cnblogs.com/w741741/p/11568757.html
Copyright © 2011-2022 走看看