博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20145337 《信息安全系统设计基础》第五周学习总结
阅读量:6210 次
发布时间:2019-06-21

本文共 2160 字,大约阅读时间需要 7 分钟。

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/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 阅读(
...) 评论(
...)

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

你可能感兴趣的文章
【326】PIL 截图及图片识别
查看>>
jquery中odd和even选择器的用法说明
查看>>
axios 拦截 , 页面跳转, token 验证
查看>>
Windows XP硬盘安装Ubuntu 12.04双系统图文详解
查看>>
Last Position of Target
查看>>
和我一起来学iOS(一)ObjectC的语法
查看>>
php_bu
查看>>
一轮项目冲刺3
查看>>
DDL语句--改动表
查看>>
javaEE之------ApectJ的切面技术===标签
查看>>
js 获取昨天,今天和明天的年月日格式
查看>>
中枢理论3
查看>>
BootStrap使用
查看>>
关于svn上传.classpath等问题
查看>>
妹子图-mysql
查看>>
谈谈地理坐标和投影坐标
查看>>
关于bat文件语法
查看>>
[原创] Ubuntu Linux 安装Eclipse
查看>>
n边形面积
查看>>
python字符串--常见操作
查看>>