• 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(*)

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

  • 相关阅读:
    POJ 3268 Silver Cow Party (Dijkstra)
    怒学三算法 POJ 2387 Til the Cows Come Home (Bellman_Ford || Dijkstra || SPFA)
    CF Amr and Music (贪心)
    CF Amr and Pins (数学)
    POJ 3253 Fence Repair (贪心)
    POJ 3069 Saruman's Army(贪心)
    POJ 3617 Best Cow Line (贪心)
    CF Anya and Ghosts (贪心)
    CF Fox And Names (拓扑排序)
    mysql8.0的新特性
  • 原文地址:https://www.cnblogs.com/w741741/p/11568757.html
Copyright © 2020-2023  润新知