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中的执行过程

  • 相关阅读:
    Linux下使用mail发送邮件
    Thirft框架介绍
    当谈论设备指纹时,我们到底在说什么?(转)
    设备指纹(Device Fingerprinting)是什么?
    搭建RESTful API 之 实现WSGI服务的URL映射
    OpenStack设计与实现5——RESTful API和WSGI
    Charles使用
    iBeacon室内定位原理解析【转】
    docker安装
    chase
  • 原文地址:https://www.cnblogs.com/baoxiyuan/p/13828858.html
Copyright © 2011-2022 走看看