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获得汇编代码
    886543-20161016192847983-816700023.png
    886543-20161016192907327-1425891429.png

  • 二进制文件可使用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中。

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

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

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

  • 实验
    886543-20161016193001264-364984354.png
    886543-20161016193019108-2024593676.png

本周代码托管截图

  • 按照教程建立相应目录
    886543-20161016192323405-195586840.png
  • 进行配置
    886543-20161016192417436-766742337.png
    886543-20161016192438967-564816818.png
  • 简化程序
    886543-20161016192639249-79619891.png

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

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

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周200/2002/220/20
第二周300/5002/418/38
第三周500/10003/722/60
第四周300/13002/930/90
第五周20/13002/930/90

参考资料

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

转载于:https://www.cnblogs.com/5337my/p/5967460.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值