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

参考资料

posted on 2016-10-16 19:49  20145337马月  阅读(223)  评论(1编辑  收藏  举报