20155302 《信息安全系统设计基础》课程总结
•20155302 《信息安全系统设计基础》课程总结
•(按顺序)每周作业链接汇总
•第一周作业:在Linux环境下C语言程序的gcc编译运行汇编方法,使用gdb进行调试、设置断点等方法。
•第二周作业:有关设置gdb断点,建立静动态库等课上未提交的题目补充,以及自主编程制作MYOD的实现。
•第三周作业:教材内容第二章《信息的表示和处理》的自主学习,教材内容总结,以及教材和代码学习中遇到的问题和解决。
•第四周作业:课上未提交题目命令行传入文件实现myod,第十章教材内容学习以及两个重要命令man -k key1 | grep key2| grep 2
和
grep -nr XXX /usr/include
的掌握。
•第五周作业:教材内容第三章《程序的机器级表示》的自主学习,教材内容总结,以及教材和代码学习中遇到的问题和解决。
•第六周作业:教材内容第八章《异常控制流》,第十章《系统级I/O》的自主学习,教材内容总结,以及教材和代码学习中遇到的问题和解决。
•第六周作业(1):课上有关汇编代码的转换和删除的未提交题目的补充,以及教材 p97 2.96 2.97,完备的测试。
•第六周作业(2):课上相关未提交题目的补充,在自己的电脑中完成https://www.shiyanlou.com/courses/231缓冲区溢出漏洞实验的详细实验过程。
•第七周作业:教材内容第四章《处理器体系结构》的自主学习,教材内容总结,以及教材和代码学习中遇到的问题和解决。
•第八周作业:教材内容第十一章《网络编程》简单过一下,教材第十二章《并发编程》的自主学习,教材内容总结,以及教材和代码学习中遇到的问题和解决。
•第八周作业(1):课上有关X86转Y86和代码反汇编的相关未提交题目的补充,以及课下实践书后习题的实践测试和多线程并发服务器的制作与测试。
•第九周作业:教材内容第六章《存储器层次结构》的自主学习,教材内容总结,以及教材和代码学习中遇到的问题和解决。
•第九周作业(1):加分项目MYPWD的自主设计与编写测试。
•第十周作业:课上未提交题目有关stat(1)指令的学习及编写的提交以及课下自主学习IPC相关知识。
•第十一周作业:教材内容第九章《虚拟存储器》的自主学习,教材内容总结,以及教材和代码学习中遇到的问题和解决。
•第十三周作业:重新精学第八章,自认非常重要的一章,对课本内容反复学习,并且全部家庭作业的编写制作,以及蓝墨云中的试题总结,结对学习,给同伴讲解收获和疑惑,共同学习,共同进步。
•第十四周作业:重新精学之前学得最差的一章,第十一章网络编程相关内容,网络编程我认为是本书核心,之前的一切学习都是为编程而做铺垫,详细重新回顾了课本内容,以及每节的扩展学习,对函数进行一一介绍,结对学习,共同进步。
•第十六周作业:课上实践补充,有关嵌入式C语言的代码编写原理问题。
•(按顺序)实验报告链接汇总
•实验一 开发环境的熟悉:交叉编译环境,目标机与宿主机的联通,目标机运行程序以及最后的清理工作,实验一为小组共同完成。
•实验二 固件程序设计:要用系统管理员身分运行uVision4,破解MDK(破解程序中target一定选ARM),KEIL-MDK 中添加 Z32 SC-000 芯片库,打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。网上找一下国密算法标准的代码和标准测试代码,在Ubuntu中分别用gcc和gcc-arm编译,并回答四个算法的用途。小组共同完成。
•实验三 实时系统:基于Linux Socket程序设计实现wc(1),使用多线程实现wc服务器并使用同步互斥机制保证计数正确。个人完成。
•实验四 外设驱动程序设计:学习资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章,在Ubuntu完成资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章的test试验。个人完成。
•实验五 通信协议设计:了解学习Linux下openssl,测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5,在Ubuntu中实现对实验二中的“wc服务器”通过混合密码系统进行防护。个人完成。
•代码托管链接和二维码:
https://gitee.com/bestiisjava2017/yxc20155302
•截图 git log --pretty=format:"%h - %an, %ar : %s" 的结果
•代码量汇总提交statistics.sh的支持截图
•代码驱动的学习做到没有?
做到了。
•加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
平时编程时,不可能所有代码都是自己现时编出来的,要学会当一名码农,平时的基础代码可以从网上搜,然后遇到核心部分需要修改的再自己思考添加模块,这样既省时又省力,要把时间用在有意义的地方,平时遇到不懂的代码要多提问,在相互讨论以及合作设计中提升自己,编程的学习不是一蹴而就的,要在平时多多积累,实验时就添加所需模块,一点点提升自己。
•实践上有什么经验教训
平时实践很重要,光看书只能学会学懂,实践却能让我们会用会设计,自己动手丰衣足食,学习要勤奋,提前预习课后复习是关键。
•整体评价一下第1周作业中自己提出的问题是不是抓住了学习重点
有一些抓住了学习重点,可大部分现在看来都是些基础问题,当时只是简单浏览并没有进行过深入思考,而有一些现在看起来也很有价值,说明自己这一个学习学到了不少知识。
•回答一下第1周作业中自己提出的问题
第一章:
编好的代码(源代码)经过编译,链接,生成可执行的文件,然后就可以执行。即编辑的代码要最重生成可执行的程序(可执行的文件),需要经过编译、链接两个步骤。编译的作用是对代码进行语法检查,而链接的作用是链接代码中用到的编译器提供的资源。所以,通常通过编译、链接后形成的只形成一个可执行的文件。
第二章:
1)算术移位 当乘数或除数是2n时,算术移位用来快速地完成对整数进行乘法或除法的运算。算数左移n位相当于乘上2n,执行方法是把原来的数中每一位都向左移动n个位置,左面移出的高位丢弃不要,右面低位空出的位置上全部补0。
2)逻辑移位 逻辑左移n位的执行方法,是把原来的数中每一位都向左移动n个位置,左面移出的高位丢弃不要,右面低位空出的位置上全部补"0"。 逻辑右移n位的执行方法是把原来数中的每一位都向右移动n个位置,右面移出的低位丢弃不要,左面高位空出的位置上全部补0。
逻辑移位:不考虑正负号
算术移位:考虑正负号。
第三章:
汇编是最基础的计算机编程语言,用作动词时就是说用汇编语言写成的程序代码经过编译连接之后生成可执行程序的过程。而反汇编就是这个过程的逆过程,一般是针对商业软件或病毒等不知道源程序是如何书写的程序,经过反汇编,将由机器码(即一条条01组成的指令)方向翻译为汇编指令,这样一定程度上可以让人们理解认识程序的编写方式,使用的算法特点等,但是针对反汇编,有许多方法可以加大反汇编的难度,比如说在程序中加壳,使用大量跳转等。
第四章:
从硬件角度来看CISC处理的是不等长指令集,它必须对不等长指令进行分割,因此在执行单一指令的时候需要进行较多的处理工作。而RISC执行的是等长精简指令集,CPU在执行指令的时候速度较快且性能稳定。因此在并行处理方面RISC明显优于CISC,RISC可同时执行多条指令,它可将一条指令分割成若干个进程或线程,交由多个处理器同时执行。由于RISC执行的是精简指令集,所以它的制造工艺简单且成本低廉。
从软件角度来看,CISC运行的则是我们所熟识的DOS、Windows操作系统。而且它拥有大量的应用程序。因为全世界有65%以上的软件厂商都理为基于CISC体系结构的PC及其兼容机服务的,象赫赫有名的Microsoft就是其中的一家。而RISC在此方面却显得有些势单力薄。虽然在RISC上也可运行DOS、Windows,但是需要一个翻译过程,所以运行速度要慢许多。
第五章:
投机执行处理器会开始执行预测的转移目标处的指令。它这样做的方式是,避免修改任何实际的寄存器或存储器位置,直到确定了实际的结果。如果预测是正确的,处理器就简单地“提交”投机执行的指令的结果,把他们存储到寄存器或存储器中。如果预测是错误的,处理器必须丢掉所有投机执行的结果,在正确的位置,重新开始取指令的过程。这样做会引起很大的转移处罚,因为在产生有用的结果之前,必须重新填充指令流水线。劣势是成本太高。
第六章:
当程序需要第k+1层的某个数据对象d时,它会首先在第k层寻找,如果d刚好在第k层,那就是缓存命中。那么程序就会从第k层直接读取d。
反之,称为缓存不命中。当发生缓存不命中时,第k层的缓存会从k+1层中取出包含d的那个块,如果k层缓存已经满了的话,就会覆盖一个块,称之为替换或者驱逐,有相应的替换策略来决定替换哪个数据块。当k层缓存了k+1层的块后,程序就能从k层直接读取数据d了。
缓存不命中有不同的种类,比如,如果k层的缓存是空的,那么此时的访问都不会命中,称之为冷缓存,在不断的访问过程中,k层的缓存逐渐趋于稳定,称之为暖身。冲突不命中是指,尽管缓存足够大,但是因为多次访问的数据对象,他们会映射到同一个k层的块,缓存就会一直不命中。
第七章:
1、应用程序在链接阶段时,会顺序生成符号表。也就是说,在应用程序中涉及到的符号,会在链接文件中逐个顺次查找
2、一旦查找到符号,就停止本符号的查找工作,转向第二个符号的查找
3、如果没有用到.a里的符号,即查找的过程中没有涉及到该.a,则不会在程序中链接该.a
4、对于.so,无论是否涉及到符号查找,均会进行加载
5、so的加载和卸载会涉及到自身内存分配和释放,而.a不会(.a相当于.o的集合,.o直接静态编译到应用程序,成为程序一部分)
6、.a和.o有不同,.a是.o的集合,但是,.o必定会加载,.a不一定会加载(只加载符号表相关的.o)
第八章:
会进入异常处理。
如果lambda内有异常处理,那么就正常吃掉。
第九章:
linux在x86体系结构上的虚拟内存实现是这样的:
内核空间使用4G虚拟内存的3-4G,对应的物理内存的计算
方法就是,内核空间的(虚拟)地址-3G;
而对于用户程序而言,使用的是1-3G
的虚拟空间,计算方法是通过查页目录表和页表来实现的。
第十章:
/*函数fgetc()例子*/
#include <stdio.h>
#include<stdlib.h>
#include<io.h>
#include<conio.h>
int main(void)
{
/*本例子需要手工创建一个文件test.txt或者与函数fputc()一起调试*/
char msg[] = "This is a test!\n";
char msgget[100];
int i = 0;
FILE* fstream;
fstream=fopen("test.txt","r"); /*打开*/
if(fstream==NULL)
{
printf("Open file failed!\n");
exit(1);
}
i = 0;
while ((msgget[i]=fgetc(fstream))!=EOF)
{
fputc((msgget[i]), stdout);
i++;
}
fclose(fstream);
return 0;
}
第十一章:
超时控制在嵌入式系统设计中具有广泛用途,许多与时间有关的流程均可借助超时控制方法来实现,如预期时间的延迟等待,设备自检,延时和定时控制等。
第十二章:
某个操作可能会陷入长时间等待,等待的线程会进入睡眠状态,无法继续执行。多线程执行可以有效利用等待的时间。典型的例子是等待网络向应,这可能要花费数秒甚至数十秒。
某个操作(常常是计算)会消耗大量的时间,如果只有一个线程,程序和用户之间的交互会中断。多线程可以让一个线程负责交互,另一个线程负责计算。
程序逻辑本身就要求并发操作,例如一个多端下载软件(例如Bittorrent)
多CPU或多核计算机(基本就是未来的主流计算机),本身具备同时执行多个线程的能力,因此单线程无法全面地发挥计算机的全部计算能力。
相对于多进程应用,多线程在数据共享方面效率要高很多。
•你有什么项目被加分,谈谈你的经验
做了加分项目实现mypwd:http://www.cnblogs.com/STILLlover521/p/7856627.html
•你有什么项目被扣分,谈谈你的教训
无
•课程收获与不足
•自己的收获(投入,效率,效果等)
本学期,在娄老师的信息安全系统设计基础这门课上下了很大的功夫,真正学到了一些知识,比如网络编程和Linux系统下的众多命令的使用方法,对于以后的编程和深入学习linux系统做好了铺垫,因为这门课知识很多而且比较难懂,所以学习的时候很认真效率也就上去了,虽然对于一些章节的学习还是不够深入,还有些没有学懂得地方,但是相比自己以前的学习已经有了长足的进步,真正让自己的水平提高了。
•自己需要改进的地方
自己的编程能力一直是弱项,自主编程能力的不足制约了我学习这门课的上限,我应该努力提高自己的变成水平,还有就是举一反三的能力仍需增强,不能只能停留在听懂理解的地步上,还要学以致用,不能稍稍做改变或者自主设计就手足无措了,这些是我还需加强的地方。
•如果有结对,写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
本学期我和秦诗茂同学结对学习,他给我的帮助很大,尤其是在编程方面,这方面我是弱项我在他的帮助下能够独立编写socket以及一些自主创新的调用指令的代码,如myod和mypwd等,我也在学期末给他讲了我对第十一章和第八章的学习成果,弥补了他的知识盲点,做到共同进步。
•给开学初的你和学弟学妹们的学习建议
•如果重新学习这门课,怎么做才可以学的更好
我的建议是这门课一定要好好学,一定要投入精力和时间进去,因为每章内容较多,建议不要把学习堆在周末,这样会很累而且效率不高,一定要每天学一点,把繁重的知识分散到每一天,这样就不会疲倦,在学习时一定要注意课后习题,娄老师把需要注意和考点的习题都在教学进程中写得很清楚,一定要认真对待,还有就是要读书和实践相结合,活学活用。
•问卷调查
•你平均每周投入到本课程多长时间?
十小时左右。
•每周的学习效率有提高吗?
有,后期明显比刚开始效率要提高不少,主要还是学习方法的改变。
•学习效果自己满意吗?
还算满意,课上不会的,课下实践也都补做了,学会了。
•课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)
不确定,要看有没有非常值得记录的知识,不想水一些没意义的东西。
•你觉得这门课老师应该继续做哪一件事情?
应该继续这种实践和读书相结合,课上实践和课下实践相呼应,讲课和自学相穿插的教学方式。
•你觉得这门课老师应该停止做哪一件事情?
应该停止教材内容自学的博客,书读过从实践结果就能看出来,教材博客用处有限。
•你觉得这门课老师应该开始做什么新的事情?
减少课上考试,多些课下实践,课上时间有限应该以讲课为主。
•其他任意发挥
•如本文链接和二维码:http://www.cnblogs.com/STILLlover521/p/8127961.html