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层块的一个小的子集中。
    • 容量不命中:当工作集的大小超过缓存的大小时,缓存会经历容量不命中,就是说缓存太小了,不能处理这个工作集。

你可能感兴趣的:(20135304刘世鹏——信息安全系统设计基础第八周期中总结)