20145201 《信息安全系统设计基础》期中总结
20145201 《信息安全系统设计基础》期中总结
教材学习内容总结
- Linux命令 特别是man -k, cheat, grep -nr xxx /usr/include
1.man:
查看帮助文档:man+关键词
man -k:
用来搜索,结合管道使用。
man -k k1 | grep k2 | grep 2
搜索同时含有k1和k2,且属于系统调用。
最后的数字代表帮助手册中的区段,常用的123,分别如下:
1.Linux
2.系统调用
3.c语言
2.cheat
提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。
cheat是非常好用的“打小抄”搜索工具
eg:
cheat ls
3.grep 用来查找关键字,全文搜索,且可以直接查找文件内的内容
greep -n 显示匹配的行号
greep -r 递归查找
eg:如果想查找某个宏,我们已知宏保存在include文件夹中:
grep -nr XXX /usr/include(XXX注意要替换为所要找的宏)
- vi使用
三种常用模式及其转换:
普通→插入: i/a
普通→命令行: “:”
插入/命令行→普通: Esc 或 Ctrl + [
常用操作:
vim 文件名:进入vim,还可新建文件
命令行模式下 :wq 表示保存并退出
- gcc, gdb使用
1、GCC
gcc流程:
1、预处理:gcc会调用预处理程序cpp,由它负责展开在源程序中定义的宏
gcc -E hello.c -o hello.i
2、编译:翻译成汇编文件
gcc –S hello.i –o hello.s
3、汇编:将hello.i编译为目标代码(二进制代码)
gcc -c hello.s -o hello.o
4、链接:gcc连接器将目标文件链接为一个可执行文件
gcc hello.o -o hello
2、GDB
在编译时,必须要把调试信息加到可执行文件中。
gcc -g hello.c -o hello
基本命令:
gdb programm 启动GDB
l 查看所载入的文件
b 设断点
info b 查看断点情况
run 开始运行程序
bt 打印函数调用堆栈
p 查看变量值
c 从当前断点继续运行到下一个断点
n 单步运行(不进入)
s 单步运行(进入)
quit 退出GDB
gdb四种断点:
①行断点 b [行数或函数名] <条件表达式>
②函数断点 b [函数名] <条件表达式>
③条件断点 b [行数或函数名] <if表达式>
④临时断点 tbreak [行数或函数名] <条件表达式>
gcc hello_print.c hello_main.c –o hello的解释中,最后一个命令的是将这两个.o文件转换为一个可执行的hello的文件
静态库和动态共享库的代码区别
创建:
静态库的创建需要调用归档工具ar:
gcc -c addvec.c multvec.c
ar rcs libvector.a addvec.o multvec.o
而动态库只需要gcc即可:
gcc -shared -fPIC -o libvector.so addvec.c multvec.c
链接:
静态库的链接需要先编译生成.o文件,然后再和库链接,并且需要staric命令构建一个完全链接的可执行文件:
gcc -02 -c main2.c
gcc -static -o p2 main2.o ./libvector.a
动态库可以直接把.c文件和库文件链接
gcc -o p2 main2.c ./libvector.so
- makefile
make工具根据makefile文件中描述的源程序至今的相互关系来完成自动编译、维护多个源文件工程。
makefile需要说明如何编译各个源文件并链接生成可执行文件,要求定义源文件之间的依赖关系。
Makefile的一般写法:
test(目标文件): prog.o code.o(依赖文件列表)
tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)
.......
eg.
例:
test: prog.o code.o
gcc prog.o code.o -o test
prog.o: prog.c code.h
gcc -c prog.c -o prog.o
code.o: code.c code.h
gcc -c code.c -o code.o
clean:
rm -f *.o test
其他:
存储系统的核心思想:缓存
Linux Bash中,cd ~ 命令可以切换到'home'目录。 (Ok)
Linux Bash中,cd - 命令可以切换到上一个目录
cd ~ 命令切换到'home'目录
一些题目总结:
Linux中没有C盘,D盘,其文件系统的目录是由(FHS)标准规定好的。
Linux Bash中,使用tar命令把home目录打包成home.tar的命令是( tar -cf home.tar ~)
Linux Bash中,ls . | sort 命令的功能是( 显示当前目录内容并排序 )
Linux系统中,链接器程序是(ld)
(Shannon 或香农)建立了布尔代数和数字逻辑之间的联系。
IEEE浮点数标准包含符号、尾数、(阶码)三部分。
Linux汇编中,销毁栈帧的语句是(movl %ebp,%esp popl %ebp 或leave)
Linux汇编中,需要调用者保存的寄存器有(%eax,%edx,%ecx )
GDB中以16进制形式打印%eax中内容的命令是(print /x $eax)
解开sim.tar的Linux命令是(tar -xvf sim.tar)
SRAM和DRAM掉电后均无法保存里面的内容。( ok )
存储器给出的读访问时间是(局部性)的一个函数。
自己的收获
在本学期的八周的学习中,我最大的收获对自主学习这种方式有了更深入的体会,也更加适应了每周对这门课的学习状态。
在刚拿到这本书的时候,心里还是有一慌乱的。被本书比上学期更厚了,感觉无从着手学习。知识量很大,常常是学习下一部分内容,就忘了上一部分内容。通过在实验楼上的实践练习还有老师画出课后的一些重点习题对知识进行巩固。
在后面逐渐深入的学习中,发现有的内容之前的其他课程或多或少都有接触过,比如汇编的知识,还有HCL知识。通过对比学习,可以让我把知识理解的更透彻、更深入。还有实验部分,最开始第一边做时没有成功,在后来自己一步步检查时查出问题所在,而后修改成功时,感觉还是很有成就感的。
学期过半,我在收获知识的同时,也学到了自学的方法,之后只有更加努力才行。
自己的不足
部分知识学习还是有些流于表面,没有深入理解到精髓。同时课后的习题也要多做,根据每周划的重点习题,更加细致去理解知识点。考试的错题要及时查看老师每周更新的答案,自己多上心一些。操作的部分也需要多多动手,不能死板的跟着步骤一步步做,无目的的敲代码,要理解每一步这样做是为了,自己为何打这些代码。
课程建议和意见
课上最好还可以讲一下书本的重点习题和错的比较多的课前测试的内容,这学期的课程还是围绕课本展开的。但这仅是我的个人的想法,老师可以酌情采纳。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 100/100 | 2/2 | 25/25 | 安装了虚拟机并学习掌握核心的linux命令 |
第二周 | 100/200 | 1/3 | 30/55 | 虚拟机上的C语言编程 |
第三周 | 150/350 | 1/4 | 10/65 | 计算机中信息的表示和运算 |
第四周 | 0/350 | 0/4 | 3/68 | 复习前几周内容 |
第五周 | 75/420 | 1/5 | 20/88 | 程序的机器级表示 |
第六周 | 125/545 | 1/6 | 20/108 | Y86指令 硬件语言控制HCL |
第七周 | 72/617 | 1/7 | 20/128 | 磁盘 存储器相关结构 |
第八周 | 0/617 | 2/9 | 20/148 | 期中总结 |