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

    1.关于部分指令的理解

      pushl %eax:把eax寄存器的值压到堆栈栈顶,相当于以下两步操作:
      1.subl $4, %esp:把堆栈栈顶esp寄存器的值减4。
      2.movl %eax, (%esp):把eax寄存器的值放到esp寄存器所指向的地方。
      popl %eax:从堆栈栈顶的位置放到eax寄存器,即出栈:
      1.movl (%esp),%eax:将esp寄存器中存的地址所存储的数据放到寄存器eax中。
      2.addl $4,%esp:将堆栈栈顶esp寄存器的值加4.
      call指令是函数调用,调用一个地址:
      call 0x12345:两个动作由硬件一次性完成。
      1.pushl %eip
      2.movl ¥0x12345
      把当前的eip寄存器的值压栈就是把下一条指令的地址保存起来,然后给eip寄存器赋予一个新值0x12345,即cpu执行的下一条指令就是从0x12345位置取得的。
      ret
      相当于把当前堆栈栈顶的一个存储单元放到eip寄存器里。
      leave:
      movl %ebp,%esp
      popl %ebp
      enter:
      pushl %ebp
      movl %esp,%ebp
      ebp或ebp+栈空间的标号表示存储的事某个时刻的ebp或esp寄存器的值,eip+代码行号表示存储的事某个时刻的eip寄存器的值。
    

    2.通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

      1.创建main.c
    


    2.执行以下语句
    $ gcc –S –o main.s main.c -m32
    结果如下:

    3.关于对书上例子程序的理解和汇编指令执行过程

      1.在main中的执行过程(标号为每一行代码所执行的顺序)
    


    2.在f中的执行过程

    3.在g中的执行过程

  • 相关阅读:
    Ubuntu分区挂载
    YOLOv3:Demo needs OpenCV for webcam images
    tf.strided_slice函数
    numpy:np.random.seed()
    python:split()函数
    python:set() 函数
    python:zip() 函数
    python:enumerate 函数
    电脑无法上网,DNS出现fec0:0:0:ffff::1%1问题
    python:map 函数
  • 原文地址:https://www.cnblogs.com/baoxiyuan/p/13828858.html
Copyright © 2011-2022 走看看