• 20145337 《信息安全系统设计基础》第五周学习总结


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

    教材学习内容总结

    • X86 寻址方式经历三代:
      1 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全;
      2 8086的分段模式;
      3 IA32的带保护模式的平坦模式;

    ISA

    • ISA即指令集体系结构,定义处理器的软件如何构建,处理器状态、指令格式、及每条指令对状态的影响

    • ISA在编译器和处理器之间提供抽象层

    • Intel的ISA为IA-32,ARM32位的ISA为ARMv4T、ARMv5TEJ和ARMv6体系结构中使用的基本32位ISA

    • 存储器系统的实际————将多个硬件存储器和操作系统软件组合起来

    • 汇编代码比之机器代码的二进制格式,具有可读性更好的文本格式表示

    • 使用gcc -S xxx.c -o xxx.s或者objdump -d xxx获得汇编代码

    • 二进制文件可使用od或x命令查看

    Intel与ATT

    1. Intel代码省略指示大小的后缀
    2. Intel代码省略寄存器前的%号
    3. Intel代码用不同的方式描述存储器中的位置
    4. 带有多操作数的指令情况下,操作数顺序相反
    • 数据传送指令:movb(传送字节)、movw(传送字)、movl(传送双字)
    • esi edi可以用来操纵数组,esp ebp用来操纵栈帧。eax,ebx,ecx,edx为通用寄存器,其中ah,al高低8位相互独立

    操作数指示符

    • 操作数分为立即数、寄存器和存储器。有许多不同的寻址方式,其中立即数寻址,包括:立即数偏移、基址寄存器、变址寄存器和比例因子构成

    • 有效地址=Imm+R[Eb]+R[Ei]*s,s必须为1、2、4、8

    • 在大小为1、2、4个字节的数据有movb、movw、movl

    • MOVS为符号扩展指令,MOVZ为零扩展指令

    • MOV类指令,源操作数为立即数,存储在寄存器或者存储器中,目的操作数指定寄存器或者存储器地址

    • 栈是一个数据结构,遵循“先进后出”的原则,push压栈,pop弹栈

    • 栈向下增长,栈顶元素为栈中元素地址最低,压栈减小栈指针,弹栈增大栈指针

    • 所谓“指针”就是地址,局部变量保存在寄存器中

    • 操作有:加载有效地址、一元操作、二元操作、移位。

    • 加载有效地址指令leal是movl指令的变形,目的操作数必须是一个寄存器

    • 二元操作中,第一个操作是源操作数,第二个操作既是源又是目的。第一个操作数可以是立即数、寄存器或是存储器位置,第二个操作数可以是寄存器或是存储器位置

    • 移位量可以是一个立即数,或者放在单字节寄存器%cl中。左移指令称SAL或SHL,右移分算术右移SAR(填符号位)与逻辑右移SHR(填0)

    • 状态寄存器的条件码有 CF(进位标志)、ZF(零标志)、SF(符号标志)、OF(溢出标志)

    • leal指令不改变任何条件码,因为它是用来进行地址计算的。

    • 比较和测试指令,这些指令不修改任何寄存器的值,只设置条件码

    CMP与SUB

    • CMP指令后往往跟着条件转移指令,实现根据比较的结果产生不同的程序分支的功能。

    • CMP虽同SUB指令一样执行减法的操作,但它并不保存运算结果,根据结果设置相关标志位

    • 二者区别就是 如SUB AX,BX SUB指令执行后,原来BX中的值被更新,CMP则数值不变

    • 执行比较命令,根据t = a -b设置条件码

    • 一个过程调用包括将 数据 和 控制 从代码的一部分传递到另一部分

    • 数据传递、局部变量的分配和释放通过操作程序栈来实现

    • call指令有一个目标,即指明被调用过程起始的指令地址。同跳转一样,

    • 调用可以是直接的,也可以是间接地。直接调用的目标是一个标号,而间接调用的目标是*后面跟一个操作数指示符。

    • call指令的效果是将返回地址入栈,并跳转到被调用过程的起始处。返回地址是在程序中紧跟在call后面的那条指令的地址。

    • ret指令从栈中弹出地址,并跳转到这个位置。栈指针要指向前面call指令存储返回地址的位置。

    • 返回值存在%eax中。

    代码调试中的问题和解决过程

    • 无法生成密钥
    • 会不会是代理有问题呢
    • 看来不是。尝试安装gitosis,然后将windowsx下生成的id_rsa.pub上传到Linux服务器,但是由于对教程一知半解还是失败了
    • 看了好几个教程,都说一路回车,只能检索不到生成密钥失败,是只有我一个人有这个问题?

    课后作业中的问题和解决过程

    • 实验

    本周代码托管截图

    • 按照教程建立相应目录
    • 进行配置

    • 简化程序

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

    这周的学习进一步了解了汇编指令,个人觉得将C语言和GCC对应起来后,理解了一部分,但是根据跳转指令写C语言还是不是完全清楚

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20
    第二周 300/500 2/4 18/38
    第三周 500/1000 3/7 22/60
    第四周 300/1300 2/9 30/90
    第五周 20/1300 2/9 30/90

    参考资料

  • 相关阅读:
    转基因(转载)
    Diwali
    使用Matplotlib画图
    项目格式规范
    关于Dapper
    JQuery
    javascript封装
    2015年2月16日——作者观点
    2015年2月12日——不懂点
    在VS2013上使用git
  • 原文地址:https://www.cnblogs.com/5337my/p/5967460.html
Copyright © 2020-2023  润新知