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

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

教材学习内容总结

浏览了正章,重点学习了以下几个点
  • switch语句:可以根据一个整数索引值进行多重分支;其中主要使用的是跳转表这个数据结构,这里就是if...else if...有所区别了,if的话就只是一个jump,而这里的switch则使用了一个跳转表数据结构作为实现基础,下面是一段switch代码,以及其汇编代码:
  • 1071611-20171022225854396-1396079866.png
    1071611-20171022225905552-1118125477.png

  • 可以看见在.rodata(read Only Data)标示下,的汇编代码就存在着跳转表信息
  • 逆向工程:逆向工程(又称逆向技术),是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是在不能轻易获得必要的生产信息的情况下,直接从成品分析,推导出产品的设计原理摘自百度百科
  • 这里我们可以同过反汇编,来查看程序的原理,理清楚它的脉络,但这毋庸置疑,需要很好的渗透技术,以及足够的耐心。当然工欲善其事必先利其器,python是一个不错的选择,但这里先从C语言基础上的计算机系统了解一点简单的逆向工程原理
  • 递归调用:从下面的截图出来的汇编代码可以看出来,递归调用一个函数,其实和调用其他函数是一样的,这是栈规则决定的。

long rfact(long n)
{
    long res;
    if(n<=1)
        res=1;
    else
        res=n*rfact(n-1);
    return res;
}
  • 1071611-20171022225940584-849342359.jpg

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

  • 问题1:P181,题3.40根据汇编代码优化出原始C程序:
void fix_set_diag(fix_matrix A,int Val)
{
    long i;
    for(i=0;i<N;i++)
        A[i][i]=Val;
}
fix_set_diag:
    void fix_set_diag(fix_matrix A,int Val)
    A in %rdi,Val in %rsi
    movl    $0,%eax
    .L13:
    movl    %sei,(%rdi,%rax)
    addq    $68,%rax
    cmpq    $1088,%rax
    jne     .L13
    rep;ret
  • 问题1解决方案:阅读上面简单的汇编程序,当一-O1优化等级编译时,下面的代码与之相似:
void fix_set_diag(fix_matrix A,int Val)
{
    int *Abase=&A[0][0];
    long i=0;
    long iend=N*(N+1);
    do{
        Abase[i]=Val;
        i+=(N+1);
    }while(i!=iend)
}

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

  • 问题1:段错误,核心已转储,我在写mybash测试代码的时候,老是出现这样的错误
    1071611-20171022230011334-335559295.jpg

  • 问题1解决方案:我百度了原因,上面说的是内存错误,分别有以下几类:
    1. 访问不存在的内存地址;
    2. 访问系统保护的内存地址;
    3. 访问只读的内存地址;
    4. 空指针废弃;
    5. 堆栈溢出;
    6. 内存越界(数组越界,变量类型不一致等);
  • 之后通过gdb调试知道了问题具体出在哪,是test的数组问题;

char **test[10];
test[0][0]="ls";
test[0][1]="-l";
test[0][2]=0;

1071611-20171022230025771-205876561.jpg

  • **test[10]改成10个*test[10]就好了

代码托管

1071611-20171022230035099-234370620.png

结对及互评

结对队友20155303

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

这周就是重温了一遍汇编,但其实不算是重温,因为之前感觉就好像根本没学一样,今后还是要学一点专一点的才好,不然总会在后面的学习过程中出现各种阻力。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行15篇400小时
第一周177/1771/110/10
第三周308/4852/212/22
第五周277/7622/410/32

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

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

  • 计划学习时间:XX小时

  • 实际学习时间:XX小时

  • 改进情况:

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

参考资料

转载于:https://www.cnblogs.com/elevator/p/7712519.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值