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


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

    教材学习内容总结

    • 数据传送指令有三种:movb(传送字节)、movw(传送字)和movl(传送双字)。

    • 调试学习p107代码,产生汇编文件后内容为如下。前面的Ltmp是标签,不是命令。

    使用od code.o查看二进制文件:

    使用godjdump -d code.o查看目标代码文件的内容:

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

    • 问题1:p106提到“编译选项-O1告诉编译器使用第一级优化”其中的第一级优化具体优化了什么?对于编译器一共有多少级优化?

    • 问题1解决方案:上网找了一下相关资料,根据编译器三级优化都干了什么?这一博客的内容,我知道了:

      GNU编译器提供-O选项供程序优化使用:

      • -O 提供基础级别的优化
      • -O2提供更加高级的代码优化,会占用更长的编译时间
      • -O3 提供最高级的代码优化
      • -O4 不优化,这是默认值

    第一级:代码调整
    代码调整是一种局部的思维方式;基本上不触及算法层级;它面向的是代码,而不是问题; 所以:语句调整,用汇编重写、指令调整、换一种语言实现、换一个编译器、循环展开、参数传递优化等都属于这一级;这个级别的优化需要掌握大量的小的优化技巧和知识,需要不断的积累;这个级别试图执行9种单独的优化功能:-fdefer-pop、-fmerge-constans等。

    第二级:新的视角
    新的视角强调的重点是针对问题的算法;即选择和构造适合于问题的算法;(冒泡排序还是快排的选择问题是这一级早就应该完成的)很多经典算法都对问题作了一些假设(包括我们当前已经完成的算法实现),而在面对实际问题时“新的视角”提示我们应该重新检视这些假设,并尝试不同的思考问题的角度,寻求适合于问题的新算法。

    第三级:表驱动状态机
    将问题抽象为另一种等价的数学模型或假想机器模型,比如构造出某种表驱动状态机;这一级其实是第二级的延伸,只是产生的效果更加明显,但它有其本身的特点(任何算法和优化活动都可以看作是他的投影),它整合了第一和第二级别中的左右优化技巧, 还包括其他三种优化。

    • 问题2:练习题3.1中的260(%ecx,%edx)值为什么是0x13?
    • 问题2解决方案:这里只要注意计算方法(十六进制加法)即可,260(%ecx,%edx),间接寻址,%eax、%edx值相加,再偏置260

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

    • 问题1:如何使用GDB调试查看分析寄存器的值?实践而非理论。
    • 问题1解决方案:

    测试代码为:

    int add (int x,int y)
    {
        return x+y;
    }
    
    int main ()
    {
       int d=add(2,5);
       printf("%d
    ",d);
       return 0;
    }
    

    之后进行gdb调试,再main和add处分别设置断点

    运行到第一个断点,查看main的汇编代码:

    输入命令:c,继续运行到add处,观察add的汇编:

    可以用p命令查看esp和edp的值

    但是输入x/16bx $edp出现了下图错误:

    并没有像网上教程一样出现寄存器内容,不知道是为什么?

    代码托管

    上周考试错题总结

    • 错题1:针对以上代码:gcc -c *.c 可以得到m.o,swap.o两个模块,哪些符号会出现在swap.o模块的.symtab条目中()

    A .buf
    B .temp
    C .swap
    D .buffp0

    • 分析:temp是局部变量,不出现在符号表中。

    结对及互评

    点评模板:

    • 博客中值得学习的或问题:
      • 对于指令和寄存器的学习很认真,总结很到位。

    本周结对学习情况

    - [20155218](http://www.cnblogs.com/xzh1996/p/7711413.html)
    - 结对照片
    - 结对学习内容
        - 讨论mybash
    

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

    汇编的学习在我看来重点就是对指令的记忆。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 65/65 1/1 10/10
    第三周 120/185 2/3 15/15
    第五周 375/560 3/6 14/29

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

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

    • 计划学习时间:14小时

    • 实际学习时间:14小时

    • 改进情况:

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    C# TryParse
    C#委托的学习笔记
    C#基础学习C# 8.0 In a Nut Shell
    Everything学习之三
    Everything学习笔记二
    搜索软件everything帮助文档全文翻译
    Git笔记之基础命令
    Git学习笔记
    附加属性
    日期函数
  • 原文地址:https://www.cnblogs.com/haoliberale/p/7710671.html
Copyright © 2020-2023  润新知