zoukankan      html  css  js  c++  java
  • 20145319 《信息安全系统设计基础》第5周学习总结

    20145319 《信息安全系统设计基础》第5周学习总结

    一 教材内容总结

    程序编码

    • 程序计数器:在IA32中通常称作pc,用%eip表示,指示即将执行的下一条指令在存储器中的地址
    • 整数寄存器:包含8个命名的位置,分别存储32位的值,这些寄存器可以存储地址或者数据
    • 条件码寄存器:保存最近执行的算术或者逻辑指令的状态信息,用来控制数据或者数据流中的变化
    • 一组浮点寄存器:存放浮点数据
    • 程序存储器:包括程序的可执行机器代码,操作系统需要的一些信息,存储器块
    • ATT格式:gcc生成代码格式中以‘.’开头的都是指导汇编器和链接器的命令 ,与我们以往学习的x86汇编格式相比,mov等命令的指向相反,即mov a, b为a->b

    数据格式

    • 字节:8bit(char)
    • 字:16bit(short)
    • 双字:32bit(int , long int, char *)
    • 数据传送指令一般分三种:movb,movw,movl(b后缀代表字节,w后缀代表字,l后缀代表双字)

    数据传送指令

    • movb,movw,movl(b后缀代表字节,w后缀代表字,l后缀代表双字)
    • movsbw(字节转字),movsbl(字节转双字),movswl(字转双字)
    • movzbw(零拓展字节转字),movzbl(零拓展字节转双字),movzwl(零拓展字转双字)
    • 压栈和出栈都是以双字为单位,pushl, popl

    算术和逻辑操作

    • 操作符与汇编命令大致相同
    • 循环,在机器码中for、do..while,while都会先转换成do..while的形式再编译成机器码

    过程

    • 栈帧结构
      • %ebp为帧指针,%esp为栈指针
      • 程序执行时,栈指针可以移动,因此大多数信息的访问都是相对于帧指针的
      • 过程P调用过程Q时,p的返回地址被压入栈中,形成p的栈帧的末尾,后面保存其他寄存器的值
      • call指令:将返回地址入栈,并跳转的被调用的过程起始处,因此,返回地址是在程序中紧跟在call后面的指令的地址
      • ret:从栈中弹出地址,并跳转到这个位置
      • level:可以使栈做好返回准备
      • %eax,%edx,%ecx划分为调用者保存寄存器,%ebx,%esi,%edi划分成被调用者保存寄存器

    二 课后练习

    • p107的代码实践:

    • gcc -S code.c编译得到汇编代码

    • gcc -c code.c得到反汇编代码,并且通过object dump查看

    三 代码托管

    心得体会

    这次学习的重点其实和以前的汇编是相通的,在学习之前温习上学期的汇编知识,但是x86汇编和今天的att格式还是有一些区别的,比较不同之处,参考相同之处学习感觉更有效率

  • 相关阅读:
    JWT认证-插件准备
    drf 框架 三大组件
    drf框架 视图、工具视图、视图集
    drf框架 ModelSerializer
    CentOS6.5 上crontab每天自动备份mysql数据库
    php-GatewayWorker搭建实时聊天室
    Centos6.8实现SVN提交后自动更新目录
    Python在线聊天软件(Tkinter)
    Navicat for MySQL连接mysql数据库时提示错误:Can't connect to MySQL server (10060)
    Ubuntu16下apache2安装ssl阿里云证书
  • 原文地址:https://www.cnblogs.com/20145319zk/p/5968149.html
Copyright © 2011-2022 走看看