郝博雅

导航

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\n",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小时

  • 改进情况:

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

参考资料

posted on 2017-10-22 16:50  郝博雅  阅读(238)  评论(2编辑  收藏  举报