20145308 《信息安全系统设计基础》期中总结
知识点
Linux命令
man -k
man -k
可以结合grep
多关键字查找- 等价命令
apropos
cheat
- cheat是非常好用的“作弊”搜索工具,能够方便的告诉你你想要的内容
grep -nr xxx /usr/include
- 查找宏 STDOUT_FILENO 的值的命令是(grep -nr STDOUT_FILENO /usr/include)
GCC
- gcc 编译程序的流程:
.c
-->.i
-->.s
-->.o
- 预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp
编 译:gcc –S hello.i –o hello.s;gcc –S调用ccl
汇 编:gcc –c hello.s –o hello.o;gcc -c 调用as
链 接:gcc hello.o –o hello ;gcc -o 调用ld
- 预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp
vi
- 在vim中,查看printf man pages(帮助文档)的命令是3K
- 插入
i
,保存并退出esc+:+w+q
gdb
- 使用gdb调试:
gcc –g gdb.c -o testgdb
启动GDBgdb testgdb
设置断点b XX
运行r
下一步n``s
跳过循环,不用单步执行until
设置临时断点tb
打印函数调用堆栈bt
查看变量值
p
从当前断点继续运行到下一个断点c
条件断点b 12 if i=1500
每次执行展示display j
退出函数finish
退出GDBq
make
- Makefile基本写法:test(目标文件): prog.o code.o(依赖文件列表)
tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)
.......
考题复习
第一周
- 填空:Linux Bash中,查找home目录中昨天创建的文件的命令是(find ~ -ctime 1)。
- 在指定目录下搜索指定文件名的文件:
find /etc/ -name interfaces
注意 find 命令的路径是作为第一个参数的 - 基本命令格式为 find [path] [option] [action]
- 与时间相关的命令参数:
-atime
最后访问时间
-ctime
创建时间
-mtime
最后修改时间
- 在指定目录下搜索指定文件名的文件:
- 判断:Linux Bash中,set/env/exprot三个命令功能等价 。x
- set,env,export。这三个命令很相似,都可以用于打印相关环境变量,区别在于涉及的是不同范围的环境变量,详见下表:
- set:显示当前 Shell 所有环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量
- env:显示与当前用户相关的环境变量,还可以让命令在指定环境中运行
- export:显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量
- set,env,export。这三个命令很相似,都可以用于打印相关环境变量,区别在于涉及的是不同范围的环境变量,详见下表:
第二周
- man -k 填空: 数据结构中有二分查找算法,C标准库中有这个功能的函数,这个函数是(bsearch)
- cheat 填空:实现“Display files,Sorted by size”功能的ls命令是 ( ls –S )
- find 填空:查找根目录下所有目录的find命令是(find / -type d)
- grep 填空:查找宏 STDOUT_FILENO 的值的命令是(grep -nr STDOUT_FILENO /usr/include)
grep
命令,在文本中或 stdin 中查找匹配字符串,格式grep [命令选项]... 用于匹配的表达式 [文件]...
- 在vim中,查看printf man pages(帮助文档)的命令是?
3K - 除了main.c外,hello.c的源代码不想给别人,如何制作一个myhello.a静态库?main.c如何使用myhello.a?
gcc -c hello.c
ar rcvs libhello.a hello.c
gcc main.c -o main -L. -lhello (or gcc main.c ./libhello.a -o main)
- 创建静态库:使用AR工具gcc -c XX.c
ar rcs libXX.a(静态库名) XX.o(添加的程序)
- 使用静态库:编译连接输入文件和静态库gcc -O2 -c XX.c(调用静态库程序名)
gcc -static -o p2 XX.o(调用静态库程序名) libXX.a(静态库)
-
除了main.c外,hello.c的源代码不想给别人,如何制作一个myhello.so共享库?main.c如何使用myhello.so?
gcc -fPIC -c hello.c
gcc -shared -o libhello.so hello.o
gcc -o main main.c -L. -lhello
libhello.so 要拷贝到/lib or /usr/lib- 共享库的生成
gcc -fPIC -c xxx.c
gcc -shared -o libxxx.so xxx.o
- 共享库的使用:
gcc -o main main.c -L. -lxxx
- 共享库的生成
-
写出编译上面代码的makefile,编译出来的目标文件为testhello, 只用显式规则就可以.
testhello: main.o hello.o
gcc main.o hello.o -o testhello
main.o: main.c hello.h
gcc -c main.c
hello.o: hello.c hello.h
gcc -c hello.c- Makefile基本写法:test(目标文件): prog.o code.o(依赖文件列表)
tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)
.......
- Makefile基本写法:test(目标文件): prog.o code.o(依赖文件列表)
第三周
- man -k 填空:Linux中查找配置(configure)网卡(interface)的命令是(man –k configure | grep interface )
- gdb判断: gdb中next和step都可以单步跟踪,根据自顶向下原则应该优先选用next. ( ok )
- ch07 判断:C语言中的全局变量可以一次声明,多次定义。(X)
- 2.19 填空:T2U4(8) = ( 8 )
- T2Uw(x)=x+2^w(x<0)或x(x>=0)
- 2.21 判断:C语言中: -2147483647-1 < -2147483647 ( ok )
- 有符号数比较大小
- 2.27 填空: x=9,y=12, x,y为四位无符号数,x+y = ( 5 )
- 溢出,返回值为5
- 2.33 填空:对于四位数补码0xC,其补码的非表示为十进制为( 4 )
- 十进制:-4,补码的非十进制:4
- 2.50 填空:二进制数0.111舍入到最接近的二分之一的十进制的值为( 1 )
- CH02 填空:计算机将信息按位编码,通常组织成(字节)序列。
- CH02填空:计算机的(字长)指明整数和指针数所的标称大小。
第五周
- CH03 填空:(程序计数器或%eip) 指示将要执行的下一条指令在内存中的地址。
- PC指示下一条指令在寄存器中的地址
- CH03 判断: SET指令对有符号数和无符号数有不同的处理方式。(X)
- CH03 填空:Linux汇编中,销毁栈帧的语句是(movl %ebp,%esp popl %ebp 或leave)
- CH03 填空:Linux汇编中,需要调用者保存的寄存器有(%eax,%edx,%ecx )
- %eax、%edx、%ecx被划分为调用者保存寄存器
- %ebx、%esi、%edi被划分为被调用者保存寄存器
第六周
- 填空:Linux中建立符号链接(快捷方式)使用的命令是( ln 或者 ln -s)
- CH04 填空:bool s= r1 || r2 || r=5 等价于(bool s = r in {1,2,5} )
=
赋值==
比较
- 4.6 判断:Y86中,执行pushl %esp时,处理器的状态是不确定的。( x )
- 压入栈中的是%esp的旧值
- CH04 判断:ALU是一种时序电路。(X)
- ALU(算数/逻辑)单元是组合电路
- CH04判断:寄存器是一种时序电路。(X)
- 时钟信号控制载入值
第七周
- CH06 判断:逻辑磁盘块就是一个块数组。( ok )
- B个扇区大小的逻辑块的序列
- CH06 判断:DMA传送不需要CPU的干涉。(OK)
- DMA(直接存储器访问):设备可以自行读写总线事务,不需要CPU的干涉
- 6.8 填空:代码的步长为:( N*N )
- 三层嵌套循环,代码访问步长为N*N
自己的收获
- 《信息安全系统设计》这门课已经上了半个学期,《深入理解计算机系统》这本书也已经看了半本,收获的首先是知识,从只会基础编程的小白信息安全系学生变成了知道计算机的存储也是分级别的;其次,感觉自己收获的是学习的习惯,如果说上学期的Java通过写博客让我养成了每周学习的习惯,这学期的课程则让我在其他系同学周末出去玩的时候,还想着周末也要学习、发博客,到了大三才感觉到学习真的不能靠别人逼迫,自己要真正意识到学习的重要性,自己要有良好的学习习惯。我想,思想上能产生如此大的变化,肯定和这门课有密不可分的关系
自己的不足
- 还是有拖延症,说什么事情只有到了deadline时效率才最高,都是谎言,那都是因为再不做就来不及了所以才开始动手的,只有早早高质量完成任务才是真正的效率高,希望这学期能治好我的拖延症
课程的建议和意见
- 这学期的课程跟上学期的课程相比,老师增加了课上讲授的内容,感觉对我的帮助是很大的,虽然很多内容在学习指导上都有,但是通过老师课上的讲述,在脑海中形成了一个半懂不懂的模糊印象,也激发了我一周的学习热情,通过学习,在过程中理解了老师讲授的内容后,就有一种豁然开朗的感觉
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 1/2 | 25/30 | 学习Linux指令 | |
第二周 | 50/50 | 1/3 | 25/55 | Linux系统下的开发环境 |
第三周 | 20/70 | 1/4 | 25/80 | 信息的表示和处理 |
第五周 | 20/90 | 1/5 | 30/110 | 程序的机器级表示 |
第六周 | 20/110 | 1/6 | 30/140 | 处理器体系结构 |
第七周 | 20/130 | 1/7 | 30/170 | 存储器层次结构 |
第八周 | 0/130 | 2/9 | 10/180 | 期中复习 |