20135323符运锦--信息安全系统设计基础第八周期中总结

学习计时:共10小时

读书:5小时

代码:0小时

作业:3小时

博客:2小时

第二周

1. man -k有一个共同特点就是基于"搜索"

2. cheat命令是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。

3. grep 可以对文件全文检索,支持正则表达式,正则表达式也是一个重要的元知识。

4.ac,apt-get,bzip2,cat,chgrp,chmod,chown,clear,compress,cp,dd,df,diff,du,dump,evn,find,finger,free,grep,gzip,head,kill,less,ln,locate,l,gout,ls,man,mkdir,more,mount,mt,mv,netstat,nslookup,od,passwd,patch,ps,pstop,pwd,rm,shell,sort,ssh,stty,tail,tar,telnet,touch,tree,uname,unzip,vi,vim,whereis,which,who,write等

5.做错的试题:

填空:Linux Bash中,Ctrl+a快捷键的作用是(将光标移至输入行头,相当于Home键)。

判断:Linux Bash中, man printf和man 1 printf 功能等价。 Ok

填空:Linux Bash中,使用wc统计hello.c共有几行代码的的命令是( wc -l hello.c )

判断:col 命令的-h参数可以将Tab换成对等数量的空格建。x , 空格换tab

第三周

电子材料:

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

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

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

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

                    gcc -shared -o libxxx.so xxx.o

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

注意注册共享库的方法

   

注意:

  • 静态库、动态库(共享库)解决了不想给别人xxx.c时还要别人用xxx.c的功能的好办法。
  • 做项目时,不要一切从头来,没准别人就有实现你功能的静态库、动态库(共享库)
  • 理解一个项目,多个模块的分模块编译的好处:没有修改就不用重新编译

   

4 gdb:  gcc -g

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

    p68 例子走一遍就行

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

5 makefile:

会画依赖图

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

     目标:依赖文件

命令

   makefile中的变量  p78的自动变量要理解

教材第一章:

p1 理解信息就是位+上下文

p2 查看源文件可以用od 命令 od -tc -tx1 hello.c

p5 冯式结构,理解p6 CPU执行指令的操作(加载、存储、操作、跳转)

p9 存储系统的核心思想:缓存

p10 操作系统核心抽象(文件、虚存、进程、虚拟机):可以指导大家学习《操作系统》

教材第七章:

p450 链接器的两个任务、目标文件的三种形式、目标文件格式(a.out COFF

 PE ELF :这四种格式,特别是PEELF格式是信安专业同学要掌握的,是研究病毒等恶意代码的基础。

p451: ELF文件格式:试试readelf命令

p455: 理解全局符号的解析:学会多个模块。

p473: 处理目标文件的工具

9.做错的试题:

man -k 填空: 数据结构中有线性查找算法,C标准库中没有这个功能的函数,但Linux中有,这个函数是(lfind或lsearch)

cheat 填空:To list the content of /path/to/foo.tgz archive using tar ( tar -jtvf /path/to/foo.tgz )

CH07选择:教材p449中 swap.c中的bufp1 是( A ) A 全局符号 B外部符号 C本地符号 D以上都不对

CH07 判断:C语言中,全局变量是强符号。(X)

1. 在vi中,查看scanf和printf man pages(帮助文档)的命令分别是?(2分)

K 3K

2. 编译和运行以上代码的命令(2分)

gcc *.c -o main

./main

3. 使用GDB调试以上代码:编译代码的命令是?main.c中如何给main函数设置断点?如何在第六行设置断点?(3分)

gcc -g *.c -o main

b main

b 6

4. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?(3分)

gcc -c add.c sub.c mul.c div.c

ar rcvs libmymath.a add.o sub.o mul.o div.o

 

gcc main.c -o main -L. -lmymath (or gcc main.c ./libmymath.a -o main)

 

5. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?(4分)

gcc -fPIC -c add.c sub.c mul.c div.c

gcc -shared -o libmymath.so add.o sub.o mul.o div.o

 

gcc -o main main.c -L. -lmymath

 

libmymath.so 要拷贝到/lib or /usr/lib

 

6. 写出编译上面代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.(4分)

 

testmymath: main.o add.o sub.o mul.o div.o

gcc main.o add.o sub.o mul.o div.o -o testmymath

main.o: main.c head.h

gcc -c main.c

add.o: add.c head.h

gcc -c add.c

sub.o: sub.c head.h

gcc -c sub.c

mul.o: mul.c head.h

gcc -c mul.c

div.o: div.c head.h

gcc -c div.c

 

 

第四周

1. 学习任务教材第二章

公式可以不看,习题不能不做,考核题目和课后习题类似,重点题目:

2.42.62.82.112.132.142.182.192.212.23

 2.242.252.272.292.332.342.392.402.422.43

2.442.452.472.502.522.54

   

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

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

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

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

p28: 代码执行一下

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

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

p38: 要用C99中的"long long"类型,编译是要用 gcc -std=c99

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

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

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

p49: 0扩展和符号扩展

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

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

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

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

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

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

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

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

2.做错的试题:

man -k 填空:Linux中显示文件(file )属性(status)的命令是( stat )

cheat 填空:使用du命令对当前目录下的目录或文件按大小排序 的命令是( du -sk *| sort -rn )

2.14 填空:a,b长度都是一个字节,a=1,b=6, a||b = ( 1 or true )

2.18 填空:16位机器上,补码0x8004转化等值的十进制是( -2044 )

2.19 判断:T2U4(-8) + 8 = 16 (OK)

2.54 判断: f== -(-f) (ok)

 

第五周

  1. 学习任务教材第三章
    本章学习内容是汇编语言,现在直接写汇编的机会不多了,但一定要能读懂,信息安全的核心思维方式"逆向"在这有很好很直接的体现,反汇编就是直接的逆向工程。
    本章重点是3.7,但没有3.1-3.6的基础也是不行,如果想真正的提高动手能力,3.11如何用GDB调试汇编要好好练习一下,不过大多GDB技巧大家都会了。
    3.1-3.7
    中练习,重点:3.1,3.3,3.5,3.6,3.9,3.14,3.15,3.16,3.22,3.23,3.27,3.29,3.30,3.33,3.34

    p104, p105: X86
    寻址方式经历三代: 
    1 DOS
    时代的平坦模式,不区分用户空间和内核空间,很不安全
    2 8086
    的分段模式
    3 IA32
    的带保护模式的平坦模式
    p106: ISA
    的定义,ISA需要大家能总结规律,举一反三,比如能对比学习ARMISAPC寄存器要好好理解;
    p107
    gcc -S xxx.c -o xxx.s 获得汇编代码,也可以用objdump -d xxx 反汇编; 注意函数前两条和后两条汇编代码,所有函数都有,建立函数调用栈帧,应该理解、熟记。 
    注意: 64位机器上想要得到32代码:gcc -m32 -S xxx.c
    MAC OS
    中没有objdump, 有个基本等价的命令otool 
    Ubuntu
    gcc -S code.c (不带-O1 产生的代码更接近教材中代码(删除"."开头的语句)
    p108:
    二进制文件可以用od 命令查看,也可以用gdbx命令查看。
    有些输出内容过多,我们可以使用 moreless命令结合管道查看,也可以使用输出重定向来查看
    od code.o | more
    od code.o > code.txt
    p109: gcc -S
    产生的汇编中可以把 "."开始的语句都删除了再阅读
    p110:
    了解LinuxWindows的汇编格式有点区别:ATT格式和Intel格式
    p111:
    表中不同数据的汇编代码后缀
    p112:
    这几个寄存器要深入理解,知道它们的用处。esi edi可以用来操纵数组,esp ebp用来操纵栈帧。 
    对于寄存器,特别是通用寄存器中的eax,ebx,ecx,edx,大家要理解32位的eax,16位的ax,8位的ah,al都是独立的,我们通过下面例子说明:
    假定当前是32x86机器,eax寄存器的值为0x8226,执行完addw $0x8266, %ax指令后eax的值是多少? 
    解析:0x8226+0x826=0x1044c, ax16位寄存器,出现溢出,最高位的1会丢掉,剩下0x44c,不要以为eax32位的不会发生溢出.

    p113:
    结合表,深入理解各种 寻址方式;理解操作数的三种类型:立即数、寄存器、存储器;掌握有效地址的计算方式 Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s
    p114: MOV
    相当于C语言的赋值"=",注意ATT格式中的方向, 另外注意不能从内存地址直接MOV到另一个内存地址,要用寄存器中转一下。能区分MOVMOVSMOVZ,掌握push,pop
    p115/p116:
    栈帧与push pop; 注意栈顶元素的地址是所有栈中元素地址中最低的。
    p117:
    指针就是地址;局部变量保存在寄存器中。
    p119:
    结合表理解一下算术和逻辑运算, 注意目的操作数都是什么类型
    特别注意一下减法是谁减去谁
    注意移位操作移位量可以是立即数或%cl中的数
    p123:
    结合C语言理解一下控制部分,也就是分支(if/switch),循环语句(while, for)如何实现的。考验大家举一反三的学习能力。控制中最核心的是跳转语句:有条件跳转p128(实现if,switch,while,for),无条件跳转jmp(实现goto)
    p124:
    有条件跳转的条件看状态寄存器(教材上叫条件码寄存器)
    注意leal不改变条件码寄存器
    思考一下:CMPSUB用在什么地方
    p125: SET
    指令根据t=a-b的结果设置条件码
    p127:
    跳转与标号
    p130/p131: if-else
    的汇编结构
    p132/p133: do-while
    p134/p135: while
    p137/p138: for
    p144/p145: switch
    p149: IA32
    通过栈来实现过程调用。掌握栈帧结构,注意函数参数的压栈顺序.
    p150/p151
    call/ret; 函数返回值存在%eax
    p174: bt/frame/up/down :
    关于栈帧的gdb命令
  2. 做错的试题:

    CH03 填空:从i386开始,x86体系结构扩展到了32位,增加了(平坦)寻址模式
    CH03
    填空:在64位机器上,要用gcc编译出32位机器码,需要使用(-m32 选项

    CH03 选择:栈用来(ABCD A 传递参数 B 存储返回信息 C保存寄存器 D本地存储。

     

     

第六周

学习任务教材 第四章

本章内容是处理器体系结构,重点掌握ISA,并能举一反三;本章带着大家设计并实现了一个结合CISCRISC思想的处理器Y86,一个类IA32体系的处理器;ISA在编译器编写者和处理器设计者之间提供了一个抽象。

本章重点是4.1-4.3,流水线部分4.4-4.5供学有余力的同学自学

练习题:4.1 4.2 4.5 4.6 4.8 4.10 4.11 4.12 4.16 4.17 4.19 4.21 4.24

做错的试题:

4.2 Y86 0xa00f 对应的汇编语句是(pushl %eax

4.10 填空:写出HCL代码,求输入字AB中的最小值( 注意是两个

CH04 填空:p266, icode == IOPL :ifun; 的功能是(加减与异或运算的选择) 

 

第七周

  1. 学习任务教材第六章
    了解存储设备的类型和特点;重点理解局部性原理和缓存思想在存储层次结构中的应用

    重点练习题:6.26.36.46.86.96.106.116.12, 6.13

    6.1


    了解三种常见存储技术:RAM/ROM/磁盘;
    RAM
    SRAMDRAM,特点和应用;
    ROM
    PROMEPROME2PROMFLASH
    磁盘是重点,涉及到后面的i/o和文件系统,做好相关练习
    磁盘结构:盘片、磁道、扇区、间隙、柱面;磁盘驱动器
    磁盘容量
    访问时间:寻道、旋转、传送
    逻辑磁盘块:这个很重要,内存可以看成字节数组、磁盘可以看成块数组
    总线
    数据总线、控制总线、地址总线
    系统总线、存储总线、I/O总线:p395图要理解
    读写事务:P389图要能理解

    6.2

    局部性原理:时间局部性、空间局部性,有能力者理解一下p429最后一段"存储器山"
    数据引用局部性
    取指令局部性
    6.3

    存储层次结构:系统观(1+1>2)(举一反三:对称不对称加密形成的混合加密系统,混合动力汽车...
    中心思想:每层存储设备都是下一层的"缓存"
    对照p408的表理解
    6.4

    高速缓存结构(SEBm):高速缓存组、高速缓存行、块
    映射
    命中
    缓存管理
  2. 做错的试题:

    6.8 填空:只修改第八行,让程序具有良好的空间局部性。改为:( sum +=a[i][j][k]

    6.2 填空:计算磁盘容量(327.68G):4个盘片,100000个柱面,每条磁道800个扇区,每个扇区512个字节。
    CH06
    填空:对磁盘扇区的访问时间包括三个部分(寻道时间、旋转时间、传送时间)。

    6.11 填空:3/4的命中率的如何计算的((32-8)/32,或每4次有一次不命中)

    CH06 填空:局部性有两种形式(时间局部性、空间局部性)。

收获

开学从学习《深入理解计算机系统》以来,对这门课已经有了一定的了解。从首先VIMGCCGDB入门,再到后来的存储器结构,一节节地跟着老师的脚步,学习到了很多的知识,对于LINUX,有了一定的认识,对于后续的学习有很大的帮助。唯有基础打得好,才能学得更多。这次期中总结让我可以对前面的知识有一个更加系统的回顾,夯实了基础,我觉得十分的有意义。

 

不足

每节都有一定的知识点不能理解,但是也不能很及时消化,总想着解决,但是学习任务过于紧凑,有时可能转眼就忘了,正好借此次总结,再次回顾之前学习的知识。

 

课程建议和意见

课程相比刚开学已经轻松了不少,希望老师以后可以加大在上课时间对知识点的讲解,其实很多知识点如果没有师傅领进门也是挺难自学的,可能我的学习能力实在有限,有时候感觉到十分吃力,望老师采纳。

 

posted @ 2015-10-31 22:53  20135323符运锦  阅读(230)  评论(3编辑  收藏  举报