• 2017-2018-1 20155320 《信息安全系统设计基础》第五周学习总结


    2017-2018-1 20155320 《信息安全系统设计基础》第五周学习总结

    《信息安全系统设计基础》第3周学习总结
    参考老师提供的教材内容导读

    教材学习内容总结

    • Intel处理器系列俗称X86,寻址方式经历三代:

    1 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全

    2 8086的分段模式

    3 IA32的带保护模式的平坦模式

    • gcc -S xxx.c 就能看到C语言编译产生的汇编代码

    gcc -c hello.c 会编译并汇编该代码

    64位机器上想要得到32代码:gcc -m32 -S xxx.c

    objdump -d xxx 反汇编

    • Intel 用术语“字”表示16位数据类型,32位称为双字。
    • 二进制文件可以用od 命令查看,也可以用gdb的x命令查看。
      有些输出内容过多,我们可以使用 more或less命令结合管道查看,也可以使用输出重定向来查看
      od code.o | more
      od code.o > code.txt

    • 了解Linux和Windows的汇编格式有点区别:ATT格式和Intel格式
    1. Intel代码省略了指示大小的后缀。我们看到指令push和mov,而不是pushq和movq
    2. Intel代码省略了寄存器名字前面的‘%’符号,用的是rbx,而不是%rbx。
    3. Intel代码用不同的方式来描述内存中的位置,例如是‘QWORD PTR[rbx]’而不是‘(%rbx)’
    4. 在带有多个操作数的指令情况下,列出操作数的顺序相反。
    • 大多数GCC生成的汇编代码指令都有一个字符后缀,表明操作数的大小。数据传送指令有四个变种:movb(传送字节),movw(传送字)、movl(传送的双字)、movq(传送四字)。

    • 寄存器要深入理解,esi edi可以用来操纵数组,esp ebp用来操纵栈帧。

    1.8086系统中:8个16位寄存器,从%ax到%bp

    2.IA32架构:8个32位寄存器,从%eax到%ebp.

    3.x86-64:原来的8个扩展到64位,标号从%rax到%rbp,还新增了8个新寄存器,从%r8到%r15

    • 操作数分为三种类型:立即数、寄存器、存储器

    • 有效地址的计算方式为: Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s

    • MOV相当于C语言的赋值”=“,注意ATT格式中的方向, 另外注意不能从内存地址直接MOV到另一个内存地址,要用寄存器中转一下

    • 栈通过push把数据压入栈中,通过pop操作删除数据,它具有一个属性:弹出的值永远是被压入而且仍在栈中的值。栈顶元素的地址是所有栈中元素地址中最低的。栈指针%rsp保存着栈顶元素的地址。

    • 加载有效地址的指令leaq,虽然形式是从内存读数据到寄存器,但实际上他根本没有引用内存,而是将有效地址写入到目的操作数。
    • call/ret; 函数返回值存在%eax中

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

    • 问题1:能区分MOV,MOVS,MOVZ

    • 问题1解决方案:通过查找资料,在一篇博客中找到了答案

      1.MOV相当于C语言的赋值”=“

      2.MOVS将作了符号扩展的字节传送到字

      3.MOVZ将作了零扩展的字节传送到字

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

    • 问题1:在课本P116页的练习时,出现了如下错误

    • 问题1解决方案:发现是有一个~没有删除,修改后结果为

    代码托管

    结对及互评

    本周结对学习情况

    • 20155326
      • 结对照片

      • 结对学习内容

        • 第三章内容

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

    本周学习内容比较多,让我感觉压力比较大。第三章的内容和上学期上的汇编课程相关联比较多,融会贯通的学感觉效果更好。同时仍感觉自己的学习效率不高,需要提升。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 200小时
    第一周 5/5 1/1 15/15
    第二周 1/2 23/38
    第三周 206/327 1/3 28/66
    第四周 206/327 1/4 10/77
    第五周 285/568 1/5 20/97 主要学习了汇编及反汇编的相关知识

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    参考资料

  • 相关阅读:
    使用SocketAsyncEventArgs犯的低级错误
    使用Beetle简单构建高性能Socket tcp应用
    构造BufferWriter和BufferReader实现高效的对象序列化和反序列化
    c#编写高性能Tcp Socket应用注意事项
    文件上传下载流程设计
    识别支点
    interface 与 delegate
    小知识:ADO.NET中的连接池
    解决问题
    IBM把Rational这个软件彻底给毁了
  • 原文地址:https://www.cnblogs.com/ljq1997/p/7710536.html
Copyright © 2020-2023  润新知