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

    一 、冯·诺依曼计算机以及寄存器的操作指令

    1.冯·诺伊曼计算机的结构

    2.寄存器

     

     二、关于实验

    1.实验的代码片段

    2.汇编代码 通过main.s查看

     

    3.整理过后的汇编程序

    4.shell操作

    关于实验的代码操作 没有什么问题 下面是对了解不够透彻的堆栈操作进行说明

    5.main函数

    将ebp的值=100压栈,ebp->100,esp->96

    将esp的值赋给ebp,ebp->96,esp->96

    esp值减4,ebp->96,esp->92

    将7赋给esp当前所指位置

    保存当前eip的值(23行),将函数 f 的第一条指令地址(9行)赋给eip,ebp->96,esp->88

    eax+11=13+11=24(接着后面的结果)
    将ebp的值赋给esp,ebp->96,esp->96,数据出栈,ebp->100,esp->100

     6.f函数

    将当前ebp的值压栈,ebp->96,esp->88
    将esp的值赋给ebp,ebp->88,esp->88
    将esp的值减4,ebp->88,esp->84
    将ebp+8后地址内所指数据(3)赋给eax,eax=3
    将eax=3赋给esp当前所指位置
    保存当前eip的值(15行),将函数shu第一条指令的地址(2行)赋给eip,esp减4,ebp->84,esp->76

     7.f函数

    将ebp的值压栈,ebp->84,esp->76
    将esp的值赋给ebp,ebp->72,esp->72
    将ebp+8后地址内所指数据(3)赋给eax,eax=3
    eax+1=3+10=13
    数据出栈,将当前esp所指地址内的数据赋给ebp,esp加4,ebp->84,esp->76
    返回第15行指令,ebp->84,esp->88

     三、总结

      通过对诺曼依体系结构的了解,加深对计算机工作的理解,通过分析汇编程序对x86指令的了解也更加深入。通过这次的学习还有实验,让我更加理解了mov,add,sub,leave,ret……这些指令用法以及对栈的影响,还了解了实验楼的用法。希望在以后的学习中能越用越熟练,学习到更多的知识。

    注:

    寄存器寻址:movl %eax,%edx  相当于edx=eax

    立即寻址:movl $0x123,%edx   相当于edx=0x123

    直接寻址:movl 0x123,%edx    相当于*(int*)0x123

    间接寻址:movl (%ebx),%edx 相当于edx=*(int*)ebx

    变址寻址:movl 4(%ebx),%edx相当于edx=*(int*)(ebx+4)

    eax为累加寄存器,ebx为基址寄存器,ecx计数寄存器,edx数据寄存器

    储存指令的寄存器eip,和堆栈的指针寄存器esp,ebp。

  • 相关阅读:
    Bean
    DI
    require import export
    JSON转js
    vue路由相关
    JS引号区别
    Go语言系列之标准库strconv
    Go语言系列之标准库flag
    Go语言系列之并发编程
    Go语言系列之自定义实现日志库
  • 原文地址:https://www.cnblogs.com/ZHANGwg11/p/13835082.html
Copyright © 2011-2022 走看看