20135304刘世鹏——信息安全系统设计基础第八周期中总结
信息安全系统设计基础期中总结
一、Linux基础知识
1.重点需要掌握的命令:
man 命令
- 1 Executable programs or shell commands(普通的Linux命令)
- 2 System calls (系统调用,操作系统的提供的服务接口)
- 3 Library calls (库函数, C语言中的函数)
- 4 Special files (指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义)
- 5 File formats and conventions eg /etc/passwd(配置文件帮助)
- 6 Games(给游戏留的,由各个游戏自己定义)
- 7 Miscellaneous (给游戏留的,由各个游戏自己定义), e.g. man(7), groff(7)
- 8 System administration commands (系统管理用的命令,这些命令只能由root使用,如ifconfig)
- 9 Kernel routines [Non standard]
man-k 命令
- 多关键字查找
man -k key1| grep key2 | grep key3 | ...
- 多关键字查找
cheat 命令
当你不确定你所运行的命令,尤其是那些使用了许多选项的复杂命令时,你会怎么做?在这种情况下,我们使用man pages来获取帮助。还有一些其它的选择可能包括像‘help’,‘whereis’和‘whatis’这样的命令。但是所有的这些既有优点,也有缺点。
- man pages来查看选项和帮助的时候,里面的描述 实在太冗长了,我们无法在短的时间里理解它的意思 - ‘help’命令可能也不会给你期待的答案。 - ‘whereis’命令几乎不给你任何信息,除了安装二 进制文件的位置(有些时候可能是重要的) - ‘whatis’命令给出一套很严格的答案,它除了说出 查询命令的作用,并没有什么太大帮助。
直到在困难中解决问题前,我们已经使用了以上全部选项,但是现在来了一个交互式的备忘录应用程序‘cheat’,它将在其余的命令中脱颖而出。
其他核心命令
- find查找一个文件在系统中的什么位置,locate是神速版本的- find(Windows下有个Everything工具和locate类似)
- grep 可以对文件全文检索,支持正则表达式,正则表达式也是一个重要的元知识
- grep 可以对文件全文检索,支持正则表达式,正则表达式也是一个重要的元知识
2.vim主要操作
- h左移 j下行 k上行 l右移
- 欲进入vim编辑器(从命令行提示符),输入vim文件名<回车>
- 退出vim,放弃所有修改: :q! <回车>
- 退出vim,保存所有修改: :wq! <回车>
- 正常模式删除字符:x
- 正常模式插入文本:i
- 按下回到正常模式
- 欲从当前光标删除至单子、单词末尾:dw
- 欲从当前光标删除至当前行末尾:d$
- 欲删除正行:dd
正常模式下一个命令格式:[number] command object
number - 命令执行的次数
command - 要做的事情,比如d代表删除
object - 代表要操作的对象,比如w代表单子、单词,¥代表到行末。
撤销以前的操作:u
- 撤销在一行中所做的改动:U
- 撤销以前的撤销命令,恢复以前的操作结果:CTRL-R
- 重置已经删除的文本内容:p
- 替换光标所在位置的字符:r
- 替换当前光标到单词末尾的内容:cw
- 替换当前光标到行末的内容:c$
- 更改命令的格式: [number] c object
- 显示当前光标所在位置和文件状态信息:CTRL -g; Shift -G将
3.gcc编译
预处理: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
4.GDB调试
- 1.启动gdb的方法有以下几种: a)gdb program也就是执行文件,一般在当前目录下。
b)gdb core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后,core dump后产生的文件。
c)gdb 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。
2.设置断点
(gdb) break func <-------------------- 设置断点,在函数func()入口处。
(gdb) info break <-------------------- 查看断点信息。
(gdb) r <--------------------- 运行程序,run命令简写
(gdb) n <--------------------- 单条语句执行,next命令简写。
(gdb) c <--------------------- 继续运行程序, continue命令简写。
(gdb) p I <--------------------- 打印变量i的值,print命令简写。
(gdb) bt <--------------------- 查看函数堆栈。
(gdb) finish <--------------------- 退出函数。
(gdb) c <--------------------- 继续运行。
(gdb) q <--------------------- 退出gdb。
3.其他调试命令有:
display 跟踪变量值的改变 until 跳出循环 finish 跳出函数 help 帮助
5.Makefile
定义宏的格式为:macroname = macrotext
使用宏的格式为:$(macroname)
- Makefile的一般写法:
- test(目标文件): prog.o code.o(依赖文件列表)
- tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)
第一章 计算机系统漫游
1.信息=位+上下文
系统中所有信息都是由一串位表示的,区分不同数据对象唯一方法是读到 这些数据对象时的上下文
2.程序被翻译成不同格式
编译系统预处理器、编译器、汇编器、链接器
第二章 信息点表示和处理
1.信息存储
- 进制
- 字
- 字节顺序
- 布尔代数
- 整数表示
- 补码
- 无符号数与有符号数转换
- 扩展数字的位表示
- 扩展数字的位表示
整数运算
- 无符号运算
- 补码运算
- 乘以常数
- 乘以常数
浮点数 标准:IEEE标准754
在float中,s、exp和frac字段分别为1位、k = 8 位和n = 23位,得到一个32位的表示;
在double中,s、exp和frac字段分别为1位、k = 11 位和n = 52位,得到一个64位的表示。
第三章程序的机器级表示
机器级编程的两种抽象
(1)指令集结构ISA
是机器级程序的格式和行为,定义了处理器状态、指令的格式,以及每条指令对状态的影响。
(2)机器级程序使用的存储器地址是虚拟地址
看上去是一个非常大的字节数组,实际上是将多个硬件存储器和操作系统软件组合起来。
操作数的三种类型
- 立即数
- 寄存器
- 存储器
2.结果存放的两种可能
- 寄存器中
存储器中 3.寻址方式
(1)立即数寻址方式
格式:$后加用标准c表示法表示的整数,如$0xAFF
- (2)寄存器寻址方式
如%eax,与汇编中学过的AX寄存器类比。
(3)存储器寻址方式
- 直接寻址方式
- 寄存器间接寻址方式
- 寄存器相对寻址方式
- 基址变址寻址方式
- 相对基址变址寻址方式
do-while循环
通用形式:
do body-statement while(test-expr); 循环体body-statement至少执行一次。
可以翻译成:
loop: body-statement t = test-expr; if(t) goto loop; 即先执行循环体语句,再执行判断。
2.while循环
通用形式:
while (test-expr) body-statement GCC的方法是,使用条件分支,表示省略循环体的第一次执行:
if(!test-expr) goto done; do body-statement while(test-expr); done: 接下来:
t = test-expr; if(!t) goto done: loop: body-statement t = test-expr; if(t) goto loop; done: 归根究底,还是要把循环改成do-while的样子,然后用goto翻译。
栈帧结构
栈用来传递参数、存储返回信息、保存寄存器,以及本地存储。
1.栈帧
为单个过程分配的那部分栈称为栈帧,通用结构见149页
所以本质上栈帧还是栈。
2.两个指针
最顶端的栈帧以两个指针界定:
寄存器%ebp-帧指针
寄存器%esp-栈指针
栈指针可移动,所以信息访问多相对于帧指针。
3.调用的过程
课本150页过程P调用过程Q的示例。
调用者的帧应该在被调用者的下面,并且调用者返回地址是它的栈帧末尾,这样可以保证被调用者执行完毕全都出栈后,程序能够继续向下执行。
关于被调用者Q用栈的几个用处:
1.保存不能存放在寄存器中的局部变量。
当要对一个局部变量使用地址操作符&的时候,就必须要为它生成一个地址,所以要入栈。这个用法!以前没见过!
2.存放它调用的其他过程的参数。
第四章
1.Y86指令集体系结构
具体使用结合练习
异常 halt指令、非法指令、访问非法地址
2.HCL硬件控制语言
数字系统
组合逻辑、存储器元素、时针信号
表达式
AND:&& OR:|| NOT:!
3.Y86的顺序实现
取指、译码、执行、访存、写回、更新PC
第六章 存储器层次结构
RAM随机访问存储器
SRAM
1.特点: - a.不需要刷新电路即能保存它内部存储的数据。 - b.集成度较低,需要很大的体积。 - c.存取快。 - d.抗干扰。 - 2.应用:一般用来作为计算机中的高速缓冲存储器
DRAM
1.特点: - 1.每个位存储为对电容的充电。 - 2.周期性的用读出然后写回的方式刷新存储器每个位。 2.应用:一般用来作为计算机中的高速缓冲存储器
磁盘存储
DRAM芯片包装在存储器模块中,它是查到主板的扩展槽中。常见的包装包括168个引脚的双列直插存储器模块,它以64位为块传送数据到存储控制器和从存储控制器传出的数据,还包括72个引脚的单列直插存储器模块,它以32位为块传送数据。
存储器层次结构
- 存储器层次结构的中心思想是:对于每个k,位于k层的更快更小的存储设备作为位于(k+1)层的更大更慢的存储设备的缓存。
- 第(k+1)层的存储器被划分成连续的数据对象片,称为块;数据总是以块大小为传送单元在相邻两层之间来回拷贝的;在任何时刻,第k层的缓存包括第(k+1)层块的一个子集的拷贝。
- 缓存不命中的种类
- 强制性不命中:一个空的缓存称为冷缓存,对任何数据对象的访问都不会命中。通常是短暂事件,不会在反复访问存储器使得缓存暖身之后的稳定状态中出现。
- 冲突不命中:限制性的放置策略——将第k+1层的某个块限制放置在第k层块的一个小的子集中。
- 容量不命中:当工作集的大小超过缓存的大小时,缓存会经历容量不命中,就是说缓存太小了,不能处理这个工作集。