信息安全系统设计基础第七周期中总结

知识点总结

第一周

命令行常用快捷键

按键

作用

Tab

Ctrl+c

补全命令、目录、命令参数

强行终止当前程序

Ctrl+d

键盘输入结束或退出终端

Ctrl+s

暂定当前程序,暂停后按下任意键恢复运行

Ctrl+z

将当前程序放到后台运行,恢复到前台为命令fg

Ctrl+a

将光标移至输入行头,相当于Home键

Ctrl+e

将光标移至输入行末,相当于End键

Ctrl+k

删除从光标所在位置到行末

Alt+Backspace

向前删除一个单词

Shift+PgUp

将终端显示向上滚动

Shift+PgDn

将终端显示向下滚动

输入历史命令

常用通配符

字符

含义

*

匹配 0 或多个字符

?

匹配任意一个字符

[list]

匹配 list 中的任意单一字符

[!list]

匹配 除list 中的任意单一字符以外的字符

[c1-c2]

匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]

{string1,string2,...}

匹配 sring1 或 string2 (或更多)其一字符串

{c2..c2}

匹配 c1-c2 中全部字符 如{1..10}

帮助命令:man

man手册区段

区段

说明

1

一般命令

2

系统调用

3

库函数,涵盖了C标准函数库

4

特殊文件(通常是/dev中的设备)和驱动程序

5

文件格式和约定

6

游戏和屏保

7

杂项

8

系统管理命令和守护进程

要查看相应区段的内容,就在 man 后面加上相应区段的数字即可,如:

man 3 printf;

关键字检索:man -k k1| grep k2 | grep 2…(等于apropos)

例如:

man -k ad;  #显示man手册中所有包含ad的命令或说明文件并列条显示

查找命令find  find [path] [option] [action]

在指定目录下搜索指定文件名的文件:

find /etc/ -name interfaces

时间参数:

-atime

最后访问时间

-ctime

创建时间

-mtime

最后修改时间

n、+n、-n的区别:

-mtime n: n 为数字,表示为在n天之前的”一天之内“修改过的文件

-mtime +n: 列出在n天之前(不包含n天本身)被修改过的文件

-mtime -n: 列出在n天之前(包含n天本身)被修改过的文件

例如:

列出 home 目录中,当天(24 小时之内)有改动的文件:

find ~ -mtime 0

newer file: file为一个已存在的文件,列出比file还要新的文件名,例如:

列出用户家目录下比Code文件夹新的文件:

find ~ -newer /home/shiyanlou/Code

查找匹配字符串grep

grep [命令选项]... 用于匹配的表达式 [文件]...

例:搜索/home/shiyanlou目录下所有包含"shiyanlou"的所有文本文件,并显示出现在文本中的行号:

grep -rnI "shiyanlou" ~

 -r 参数表示递归搜索子目录中的文件,-n表示打印匹配项行号,-I表示忽略二进制文件

查看环境变量中以"yanlou"结尾的字符串:

export | grep ".*yanlou$"

查找宏的值:

grep –nr 【宏名称、全大写】 /usr/include

其中-r代表递归查找,-n代表行数

基本指令

apt-get、cd、mkdir、cp(复制)、rm(删除)、mv(移动、重命名)、rename(批量重命名)、cat(正序查看文件)、tac(倒序查看文件)、nl(添加行号并打印)、more和less(分页查看)、zip、rar、tar、df(查看磁盘容量)、du(查看目录容量)、wc(计数)、uniq(去重)、

第二周

1.vim的使用

(1)三种常用模式的切换:

常用模式:普通模式、插入模式和命令行模式。

普通→插入: i 或 a  插入→普通: Esc 或 Ctrl + [ 普通→命令行: :

命令行→普通:Esc

命令行模式下输入wq ,回车后保存并退出

(2)进入:vim/vim 文件名.格式

(3)帮助

大写“K”可以用来查找函数的帮助信息:查看 man page,命令模式下,将光标放在函数名上,按"K"可以直接察看 man page

2.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

3.调试工具gdb的使用

gdb program 启动gbd

b 设断点(4种断点:行断点、函数断点、条件断点、临时断点)

run 开始运行程序

bt 打印函数调用堆栈

p 查看变量值

c 从当前断点继续运行到下一个断点

n 单步运行

s 单步运行

quit 退出gdb

display 跟踪变量值的改变
until 跳出循环
finish 跳出函数
help 帮助

第三周

  1. 进制转换
  2. 信息存储(布尔代数、位级运算、逻辑运算、移位运算)
  3. 整数表示(无符号数编码、有符号数编码、转换、扩展、截断)
  4. 整数运算(无符号数、有符号数)
  5. 浮点数(IEEE表示、浮点运算)

第四周

基本指令

mov

push

传送

压栈

pop

出栈

Leal

加载有效地址

sal

算术左移fg

Shl

逻辑左移

sar

算术右移(补符号位)

shr

逻辑右移(补0)

mull

有符号乘法

imull

无符号乘法

divl

无符号除法

idivl

有符号除法

条件码

CF:进位标志

ZF:零标志

SF:符号标志

OF:溢出标志

算术指令

ADD 加法指令 影响标志位

ADC 带进位加法指令 影响标志位

INC 加一指令 不影响CF,影响别的标志位

SUB 减法指令 影响标志位

SBB 带借位减法指令 影响标志位

DEC 减一指令 不影响CF,影响其他标志位

NEG 求补指令 影响标志位 只有操作数为0,例如字运算对-128求补,OF=1,其他时候OF=0

CMP 比较指令 做减法运算但不存储结果,根据结果设置条件标志位

MUL 无符号数乘法指令

IMUL 有符号数乘法指令   均对CF和OF位以外的条件码位无定义(即状态不定)

DIV 无符号数除法指令

IDIV 带符号数除法指令 除法指令对所有条件码位均无定义

位操作指令

AND 逻辑与

OR 逻辑或

NOT 逻辑非 不影响标志位

XOR 异或

TEST 测试指令  

控制转移指令

JMP 无条件转移指令 不影响条件码

所有条件转移指令  都不影响条件码

循环指令

不影响条件码

调用指令

CALL调用

RET返回

不影响条件码

第五周

程序员可见状态

(1)8个程序寄存器,%eax,%ecx,%edx,%ebx,%esi,%edi,%esp,%ebp

(2)处理器的每个程序寄存器存储一个

(3)寄存器%esp被入栈、出栈、调用和返回指令作为栈指针。在其他情况下,寄存器没有固定的含义或固定值。

(4)有三个一位条件码:ZF,SF,OF,它们保存最近的算术或洛基指令所造成英雄的有关信息。

(5)程序计数器PC存放当前正在执行指令的地址。

(6)存储器:Y86程序用虚拟地址来引用存储器位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址

(7)状态码stat表明程序执行的总体状态,会指示是正常运行还是出现了某种异常。

  1. 指令
  2. 编码
  3. 异常
  4. HCL
  5. 顺序实现

六个基本阶段:取指;译码;执行;访存;写回;更新PC

第六周

  1. RAM
  2. ROM
  3. 主存到CPU:movl A,%eax;CPU到主存:movl %eax,A
  4. 磁盘容量=字节数/扇区*平均盘区数/磁道*磁道数/表面*表面数/盘片*盘片数/磁盘
  5. 访问时间 =寻道时间+旋转时间+传送时间
  6. 总线:数据总线、控制总线、地址总线
  7. 利用局部性

局部性:空间局部性、时间局部性

步长增加,空间局部性下降;

循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。

缓存不命中(替换策略):冷不命中、冲突不命中、容量不命中

高速缓存存储器结构(S,E,B,m)

重点&补充

1.搜索能力:

man: man -k  (等价于apropos)  

cheat

find  locate

which whereis

apt-cache search

2.GCC编译的四个步骤:预处理(gcc -E)、编译(gcc -S)、汇编(gcc -c)、链接,  gcc 选项可以简记为“ESc”,相应的产出文件的后缀可以简记为“iso”

3.静态链接库的生成:ar rcsv libxxx.a xxx.o

  静态库的使用: gcc -o main main.c -L. -lxxx   注意-L   -l 的含义

4.共享库的生成 gcc -fPIC -c xxx.c

                    gcc -shared -o libxxx.so xxx.o

  共享库的使用:gcc -o main main.c -L. -lxxx

  1. 注意注册共享库的方法
  2. gdb:  gcc –g

    四种断点(函数、行、条件、临时)

    p68 例子走一遍就行

    p75 修改变量的值:set var n=4   资料上有误

  1. makefile:

会画依赖图

   会根据依赖图写显示规则:

     目标:依赖文件

  1. makefile中的变量  p78的自动变量要理解
  2. 理解信息就是位+上下文
  3. p2 查看源文件可以用od 命令 : od -tc -tx1 hello.c
  4. p5 冯式结构,理解p6 CPU执行指令的操作(加载、存储、操作、跳转)
  5. p9 存储系统的核心思想:缓存
  6. p10 操作系统核心抽象(文件、虚存、进程、虚拟机):可以指导大家学习《操作系统》
  7. 教材第七章:
  8. p450 链接器的两个任务、目标文件的三种形式、目标文件格式(a.out COFF
  9.  PE ELF) :这四种格式,特别是PE,ELF格式是信安专业同学要掌握的,是研究病毒等恶意代码的基础。
  10. p451: ELF文件格式:试试readelf命令
  11. p455: 理解全局符号的解析:学会多个模块。
  12. p473: 处理目标文件的工具

 

20.p20: 三种数字:无符号数、有符号数(2进制补码)、浮点数,信息安全系同学从逆向角度考虑为什么会产生漏洞

21.p22: 进制转换,注意拿二进制作中间结果就好转了

22.p25: gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码

23.p26: 字节顺序是网络编程的基础,记住小端是“高对高、低对低”,大端与之相反就可以了。

24.p28: 代码执行一下

25.p32: 能区分逻辑运算(结果是1或0)和位运算(结果是位向量),所有逻辑运算都可以用与、或、非表达(最大式、最小式),而与或非可以用“与非”或“或非”表达,所以,只要一个与非门,就可以完成所有的逻辑运算。

26.p33: 掩码是位运算的重要应用,对特定位可以置一,可以清零

27.p38: 要用C99中的“long long”类型,编译是要用 gcc -std=c99

28.p39: 补码的利用寄存器的长度是固定的特性简化数学运算。想想钟表,29.12-1 等价于 12 + 11,利用补码可以把数学运算统一成加法,只要一个加法器就可以实现所有的数学运算。

30.p44: 注意C语言中有符号数和无符号数的转换规则,位向量不变。想想第一章说的  信息就是“位+上下文”

31.p48: 怎么样让负数等于正数? 信息安全的逆向思维

32.p49: 0扩展和符号扩展

33.p52: 深入思考一下代码和结果

34.p54: 如何让整数运算溢出?如何避免? p62例子看看

35.p67: 关于整数运算的最后思考

36.p67: 浮点数有科学计数法的基础就不难理解,IEEE标准754

37.p68: 浮点数运算的不精确性与舍入

38.p70: IEEE浮点标准,float/double类型

39.p74: 整数与浮点数表示同一个数字的关系

40.p78: 整数与浮点数转换规则

 

41.p104, p105: X86 寻址方式经历三代:DOS时代的平坦模式,不区分用户空间和内核空间,很不安全;8086的分段模式;IA32的带保护模式的平坦模式

42.p106: ISA的定义,ISA需要大家能总结规律,举一反三,比如能对比学习ARM的ISA;PC寄存器要好好理解;

43.p107: gcc -S xxx.c -o xxx.s 获得汇编代码,也可以用objdump -d xxx 反汇编; 注意函数前两条和后两条汇编代码,所有函数都有,建立函数调用栈帧,应该理解、熟记。

44.注意: 64位机器上想要得到32代码:gcc -m32 -S xxx.c

MAC OS中没有objdump, 有个基本等价的命令otool

Ubuntu中 gcc -S code.c (不带-O1) 产生的代码更接近教材中代码(删除"."开头的语句)

45.p108: 二进制文件可以用od 命令查看,也可以用gdb的x命令查看。

有些输出内容过多,我们可以使用 more或less命令结合管道查看,也可以使用输出重定向来查看

od code.o | more

od code.o > code.txt

46.p109: gcc -S 产生的汇编中可以把 以”.“开始的语句都删除了再阅读

47.p110: 了解Linux和Windows的汇编格式有点区别:ATT格式和Intel格式

48.p111: 表中不同数据的汇编代码后缀

49.p112: 这几个寄存器要深入理解,知道它们的用处。esi edi可以用来操纵数组,esp ebp用来操纵栈帧。对于寄存器,特别是通用寄存器中的eax,ebx,ecx,edx,大家要理解32位的eax,16位的ax,8位的ah,al都是独立的,我们通过下面例子说明:

假定当前是32位x86机器,eax寄存器的值为0x8226,执行完addw $0x8266, %ax指令后eax的值是多少?

解析:0x8226+0x826=0x1044c, ax是16位寄存器,出现溢出,最高位的1会丢掉,剩下0x44c,不要以为eax是32位的不会发生溢出.

50.p113: 结合表,深入理解各种 寻址方式;理解操作数的三种类型:立即数、寄存器、存储器;掌握有效地址的计算方式 Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s

51.p114: MOV相当于C语言的赋值”=“,注意ATT格式中的方向, 另外注意不能从内存地址直接MOV到另一个内存地址,要用寄存器中转一下。能区分MOV,MOVS,MOVZ,掌握push,pop

52.p115/p116: 栈帧与push pop; 注意栈顶元素的地址是所有栈中元素地址中最低的。

53.p117: 指针就是地址;局部变量保存在寄存器中。

54.p119: 结合表理解一下算术和逻辑运算, 注意目的操作数都是什么类型

特别注意一下减法是谁减去谁

注意移位操作移位量可以是立即数或%cl中的数

55.p123: 结合C语言理解一下控制部分,也就是分支(if/switch),循环语句(while, for)如何实现的。考验大家举一反三的学习能力。控制中最核心的是跳转语句:有条件跳转p128(实现if,switch,while,for),无条件跳转jmp(实现goto)

56.p124: 有条件跳转的条件看状态寄存器(教材上叫条件码寄存器)

注意leal不改变条件码寄存器

57.思考一下:CMP和SUB用在什么地方

58.p125: SET指令根据t=a-b的结果设置条件码

59.p127: 跳转与标号

60.p130/p131: if-else 的汇编结构

61.p132/p133: do-while

62.p134/p135: while

63.p137/p138: for

64.p144/p145: switch

65.p149: IA32通过栈来实现过程调用。掌握栈帧结构,注意函数参数的压栈顺序.

66.p150/p151: call/ret; 函数返回值存在%eax中

67.p174: bt/frame/up/down :关于栈帧的gdb命令

 

68.了解三种常见存储技术:RAM/ROM/磁盘;

69.RAM有SRAM和DRAM,特点和应用;

ROM有PROM,EPROM,E2PROM,FLASH;

70.磁盘是重点,涉及到后面的i/o和文件系统,做好相关练习

磁盘结构:盘片、磁道、扇区、间隙、柱面;磁盘驱动器

磁盘容量

71.访问时间:寻道、旋转、传送

72.逻辑磁盘块:这个很重要,内存可以看成字节数组、磁盘可以看成块数组

73.总线:数据总线、控制总线、地址总线

74.系统总线、存储总线、I/O总线:p395图要理解

75.读写事务:P389图要能理解

 

76.局部性原理:时间局部性、空间局部性,有能力者理解一下p429最后一段“存储器山”(山脊:时间局部性)

77.数据引用局部性

78.取指令局部性

79.存储层次结构:系统观(1+1>2)(举一反三:对称不对称加密形成的混合加密系统,混合动力汽车...)

80.中心思想:每层存储设备都是下一层的“缓存”

81.对照p408的表理解

82.高速缓存结构(S,E,B,m):高速缓存组、高速缓存行、块

83.映射

84.命中

85.缓存管理

 

 

 

个人感想

不知不觉学期已过半,对这门课的情绪一直在变化。还记得第一周,还没从手忙脚乱的电工实习中缓过劲就连熬十几个小时在学校的烂网下赶那十几个实验,就此也对这门课、还有老师特殊的教学方式产生不小的抵触,每周做任务很煎熬然而必须要做。但是随着一周又一周过去,我渐渐习惯了这种每周都花固定时间来学习的生活。实话说大学以来我的学习能力下降了太多太多,积极性主动性什么的更是几乎消磨殆尽,而这种“使自主”学习方式,让我每天都想着还要学习还要学习,这种态度的转变我觉得是最大的收获。

在实际学习中,娄老师提供了很多新式的平台方式,实验楼自主实验、博客借鉴、小组论坛讨论、合作完成家庭作业等,除去学校网速限制以外我从中受益很多。以前学习遇到问题可能直接就放弃了,等老师课上讲或者问同学,甚至直接跳过。而现在,总是会先自己想想如何解决,然后发到论坛中,和老师同学分享自己的思路,不同的思维碰撞之后得到正确的解答,这样对问题的记忆极其深刻永远不会忘。好的学习方法对学习效果有太大的提升。

 

反思自己,我觉得我最大的问题还是自制力差,容易分心,遇到问题容易烦躁然后思维就转移了不专注了。现在跟着老师的新方式学习有些改观,加上自己的克制比如去学习不带手机,可以说比之前好很多。我觉得连续学习两小时中第二个小时要比第一个小时效率高很多,在以后的学习中要继续克制继续克制,多利用第二个小时。

 

课程建议

老师这种教学改革刚开始感觉很煎熬,但一旦习惯了才发现这样才是真正的事半功倍。如果不是这种每周任务制,大部分人到了期末都是恶补,不仅熬夜耗时间耗精力重点是还学不到东西。而现在这种方式大家的学习积极性都很高,主动抢题主动查实验,做的任务多得分就高,公平又高效。不足的地方…默默说一句老师您讲课的时候语速太快有时候听不太清……重点的地方可以说的稍微慢一点嘛……

原文地址:https://www.cnblogs.com/20135310cqr/p/4927821.html