• 20145229吴姗珊 《信息安全系统设计基础》第5周学习总结


    20145229吴姗珊 《信息安全系统设计基础》第5周学习总结

    教材学习内容总结

    程序的机器级表示

    • 计算机执行机器代码,用字节序列编码低级的操作

    • GCC C以汇编代码的形式产生输出,汇编代码是机器代码的文本表示

    • 寻址方式地址
      DOS时代的平坦模式:不区分用户空间和内核空间,很不安全。
      8086的分段模式
      IA32的带保护模式的平坦模式

    • 机器级编程的两种抽象
      指令集结构ISA是机器级程序的格式和行为,定义了处理器状态、指令的格式,以及每条指令对状态的影响
      机器级程序使用的存储器地址是虚拟地址,提供的储存器看上去是一个非常大的字节数组,实际上是将多个硬件存储器和操作系统软件组合起来

    • 二进制文件可以用od 命令查看,也可以用gdb的x命令查看。
      od code.o | more
      od code.o > code.txt

    • int、long int、所有指针都用双字,浮点数单精度4字节、双精度8字节、扩展精度10字节

    • 代码示例
      命令行中使用-s得到汇编代码,使用-c会编译并汇编
      反汇编器:带-d命令行标志的程序OBJDUMP

    • 数据传送指令
      MOV传送,MOVS符号拓展,MOVZ零拓展
      将一个值从一个存储器位置复制到另一个存储器位置需要两条指令

    • 数据格式

    • 理解操作数的三种类型
      立即数:常数值,表示为$c标准表示的整数
      寄存器:表示某个寄存器的内容
      存储器:根据计算出来的地址访问某个存储器位置

    • 数据传送指令

    • 特殊的算术操作

    • 栈的特点
      后进先出的原则
      push压栈,pop出栈
      栈顶:总是从这端插入和删除元素
      栈顶元素的地址是最低的
      栈指针%esp保存着栈顶元素的地址

    • 四组操作
      加载有效地址:将有效地址写入目的操作数,目的操作数必须是寄存器
      一元操作:只有一个操作数,既是源又是目的
      二元操作:源操作数是第一个,可以是立即数、寄存器、存储器,目的操作数是第二个,可以是寄存器、存储器,但两个不能同时为存储器
      移位:第一个是移位量,用单个字节编码且只允许0-31位的移位,可以是立即数或者放在单字节寄存器%cl中(算术右移SAR,填上符号位/逻辑右移SHR,填上0)目的操作数可以是一个寄存器或存储器

    • 寄存器使用惯例
      程序寄存器组是唯一能被所有过程共享的资源
      %eax、%edx、%ecx被划分为调用者保存寄存器
      %ebx、%esi、%edi被划分为被调用者保存寄存器

    教材学习中的问题和解决过程

    3.1 题目:将值存放在指明的存储器地址和寄存器中
    9(%eax,%edx)
    解决方法:根据操作数格式操作数值来计算:ox[9+100+03]=ox10C,地址ox10C对应值为ox11

    练习3.33 D
    做此题的时候,不太懂%esp和偏移量为+4、+8两个位置存储的数值是如何形成的,通过思考GCC生成的汇编代码,发现是将字符串“%x %x”存储在%esp的位置,同时通过leal命令,将x和y的位置存储在+8、+4的位置

    实验过程

    本周代码托管截图


    https://git.oschina.net/sssqykdky/Linux20145229/tree/week5/

    其他(感悟、思考等,可选)

    这周的内容牵涉到很多汇编的知识,上学期汇编的生疏让我现在有一点吃力,不过如果把任务分块化就轻松多了,一天看一点点,如果堆积到周末是肯定没有办法快速学习完的,看到哪里就对哪里进行实践,这样的话会对知识有很大的帮助,相信在这样的学习方法中会让人学得更好。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0/0 2/2 20/20
    第二周 300/300 3/3 18/18
    第三周 96/96 4/4 10/10
    第四周 0/0 4/4 0/0
    第五周 90/90 5/5 12/12v

    参考资料

  • 相关阅读:
    ubuntu下安装jupyter notebook问题。ERROR: Package ‘ipython‘ requires a different Python: 3.5.2 not in 」=3.6
    VmWare虚拟机设置ubuntu和windows之间的共享文件夹
    标准测试宏选项
    C库函数、系统函数等调用错误的处理方法
    比atoi()函数更健壮的一类包装函数
    系统函数和C库函数调用的几种错误处理方法
    经典生产者-消费者问题解析
    linux下的并发编程详解
    一文学会GDB操作命令
    Stm32CubeMx lwip+freeRTOS TCP 服务
  • 原文地址:https://www.cnblogs.com/20145229ss/p/5967549.html
Copyright © 2020-2023  润新知