【杂谈】ICS课程中前6个lab的总结

  时至暑假,好好回忆下上个学期ICS课程中CSAPP那本书上的6个lab。

 

  Lab 1 : 位运算

    貌似没什么好说的,学会SVN提交代码,然后就是智力题了。当时不清楚规则以为有30分是比谁的操作符少,最后几个人丧心病狂到用离散的知识,语法的顺序,简化操作符,最后总数竟然从120+到了90+...最后发现只要下于规定个数就是满分,sign~。不过在简化的过程中还是略有所得的。

 

  Lab 2 : 二进制炸弹

    加深对汇编的理解,根据汇编代码推测程序要干的事情,所谓的”逆向工程“,或许破解大概就是这种过程吧。难度不是太大,一步一步慢慢推敲都能搞定,乐趣是在过程中用gdb修改寄存器各种jump过关以及一个叫”卓神“的人在发送给服务器信息之前用gdb修改信息篡改别人的分数,其乐无穷。

  

  Lab 3 : BufferOverflow

    一个原来黑客攻击的方法,加深对栈的理解,这个lab算栈的位数打草稿,意思感觉不是很大。

 

  Online Test:

    Lab2和Lab3的上机测试,Lab2和Lab3老老实实自己做过的人一般都没什么问题,但是我Lab2跳过,在test过程中除了Secret phase的跳了服务器报错吓出一身冷汗,还好在之后只跳secret phase成功过了。

 

  Lab 4:模拟器

    开始觉得工程量很大,其实后来发现就是按部就班写代码,很轻松,不怎么说了。

 

  Lab 5:编译器

    慢慢上手,难点在于之后的标记和重定位,接触到了链表的操作,有一定难度,花花时间满分也不是很难,就是时间花的略多。

 

  Lab 6:malloc库

    小学期做的,实现malloc,free,realloc功能,分数根据效率和速度计算,最后实际上还看你代码提交是否正确,格式,以及编译是否有警告,还好本人编译的时候有洁癖,警告没有所以没扣分,^_^。

    如果想拿满分的话是这6个Lab里面最难的没有之一,本人大概花了40个小时才做到97,调试起来极蛋疼,可以充分锻炼调试技巧。需要看文件分配的方式和顺序,打草稿设计相应的优化策略,尤其是2个realloc和2个binary,策略设计的好可以100%利用,贱一点可以链表头都去掉直接返回地址。 链表的种类大概有 ”隐式空闲“ ”显示空闲“ ”显示分离空闲“ 以及各种树分配?”隐式空闲“搜索太慢速度不能满分,”显示分离“做起来麻烦但是前几个文件的利用率高于”显示空闲“,但都能做到满分。

 

    啊,快乐的半个月暑假~

posted @ 2013-08-04 00:50  Azard  阅读(2956)  评论(1编辑  收藏  举报