首页新闻招聘找找看知识库
  • 回复:11 浏览:2739 2015-09-25 20:53 来自 rocedu

    =====================================================================

    第二周:

    搜索能力:

    1 man: man -k  (等价于apropos)  

    2 cheat

    3 find  locate

    4 which whereis

    5 apt-cache search

    =====================================================================

    第三周:电子材料:

    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) :这四种格式,特别是PE,ELF格式是信安专业同学要掌握的,是研究病毒等恶意代码的基础。

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

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

    p473: 处理目标文件的工具

    p474:家庭作业可以选做,协调好每题最多两人一组做,一星题目一人加一分,二星加二分,三星加三分,四星加四分

    ============================================================

    第四周:学习任务教材第二章

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

    2.4、2.6、2.8、2.11、2.13、2.14、2.18、2.19、2.21、2.23、

     2.24、2.25、2.27、2.29、2.33、2.34、2.39、2.40、2.42、2.43、

    2.44、2.45、2.47、2.50、2.52、2.54

     

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

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

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

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

    p28: 代码执行一下

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

    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: 整数与浮点数转换规则

    p80:家庭作业可以选做,协调好每题最多两人一组做,一星题目一人加一分,二星加二分,三星加三分,四星加四分

    ==============================================================

     

     

     

     

     

     

     

     

     

     

     

  • rocedu
    2015-09-26 07:51 rocedu
    @20135220谈愈敏
    对。改了,谢谢。
    第1楼 回到顶楼
  • 娄老师
    2015-10-06 12:48 娄老师
    第五周:学习任务教材第三章
    本章学习内容是汇编语言,现在直接写汇编的机会不多了,但一定要能读懂,信息安全的核心思维方式“逆向”在这有很好很直接的体现,反汇编就是直接的逆向工程。
    本章重点是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需要大家能总结规律,举一反三,比如能对比学习ARM的ISA;PC寄存器要好好理解;
    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 命令查看,也可以用gdb的x命令查看。
    有些输出内容过多,我们可以使用 more或less命令结合管道查看,也可以使用输出重定向来查看
    od code.o | more
    od code.o > code.txt
    p109: gcc -S 产生的汇编中可以把 以”.“开始的语句都删除了再阅读
    p110: 了解Linux和Windows的汇编格式有点区别:ATT格式和Intel格式
    p111: 表中不同数据的汇编代码后缀
    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+0x8226=0x1044c, ax是16位寄存器,出现溢出,最高位的1会丢掉,剩下0x44c,不要以为eax是32位的不会发生溢出.

    p113: 结合表,深入理解各种 寻址方式;理解操作数的三种类型:立即数、寄存器、存储器;掌握有效地址的计算方式 Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s
    p114: MOV相当于C语言的赋值”=“,注意ATT格式中的方向, 另外注意不能从内存地址直接MOV到另一个内存地址,要用寄存器中转一下。能区分MOV,MOVS,MOVZ,掌握push,pop
    p115/p116: 栈帧与push pop; 注意栈顶元素的地址是所有栈中元素地址中最低的。
    p117: 指针就是地址;局部变量保存在寄存器中。
    p119: 结合表理解一下算术和逻辑运算, 注意目的操作数都是什么类型
    特别注意一下减法是谁减去谁
    注意移位操作移位量可以是立即数或%cl中的数
    p123: 结合C语言理解一下控制部分,也就是分支(if/switch),循环语句(while, for)如何实现的。考验大家举一反三的学习能力。控制中最核心的是跳转语句:有条件跳转p128(实现if,switch,while,for),无条件跳转jmp(实现goto)
    p124: 有条件跳转的条件看状态寄存器(教材上叫条件码寄存器)
    注意leal不改变条件码寄存器
    思考一下:CMP和SUB用在什么地方
    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楼 回到顶楼
  • 娄老师
    2015-10-14 05:10 娄老师
    第六周:学习任务教材 第四章

    本章内容是处理器体系结构,重点掌握ISA,并能举一反三;本章带着大家设计并实现了一个结合CISC和RISC思想的处理器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

    以习题驱动,再看书,有问题及时在答疑论坛问
    第3楼 回到顶楼
  • 娄老师
    2015-10-18 05:49 娄老师
    第七周:学习任务教材第六章
    了解存储设备的类型和特点;重点理解局部性原理和缓存思想在存储层次结构中的应用

    重点练习题:6.2,6.3,6.4,6.8,6.9,6.10,6.11,6.12, 6.13

    6.1 节

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

    6.2 节
    局部性原理:时间局部性、空间局部性,有能力者理解一下p429最后一段“存储器山”
    数据引用局部性
    取指令局部性
    6.3 节
    存储层次结构:系统观(1+1>2)(举一反三:对称不对称加密形成的混合加密系统,混合动力汽车...)
    中心思想:每层存储设备都是下一层的“缓存”
    对照p408的表理解
    6.4节
    高速缓存结构(S,E,B,m):高速缓存组、高速缓存行、块
    映射
    命中
    缓存管理
    第4楼 回到顶楼
  • 娄老师
    2015-11-04 08:08 娄老师
    第十章


    怎样学习系统编程(利用Linux学习Linux编程)

    1 分析实用程序
    /bin, /usr/bin, /usr/local/bin
    学习使用工具,分析工具,了解功能和原理
    2 学习系统调用
    函数和系统调用本质上都是函数。不同的库,不同的头文件
    分析需要哪些系统调用,学习系统调用的使用方法:参数?返回值?
    3 编程实现
    利用上面的原理和一组协同工作的系统调用,自己编程实现使用程序的功能
    或积极主动抄代码,学习那些系统调用是协同工作的

    C语言的学习可以参考这个思路,实现标准库
    伴随我们学习经常要问的三个问题:
    能做什么?
    如何实现?
    自己如何编写?

    比如说Linux操作系统
    能做什么?
    登录-运行程序-注销
    如何登录?如何获取程序名?如何运行程序?
    目录操作:目录树:ls,cd,pwd,mkdir,rmdir
    目录树如何组织的?目录存在哪?什么是当前目录?
    文件操作:cat, more/less/pg, cp, mv, lpr
    文件数据如何存储?如何复制,移动,改名?文件名存在哪?
    文件访问控制:ugo
    如何设置?

    从OS的角度看: 网络游戏
    通信
    协作
    网络访问
    bc/dc---->网络 B/S

    标准I/O 学习示例:more

    能做什么?用一下

    使用方法
    more filename
    more < filename
    command | more
    如何实现?
    伪代码:

    如果用户没有输入文件名
    输出键盘输入内容
    对整个文件
    显示24行
    提示用户选择 空格 回车 q
    如果用户选择空格
    显示下24行
    如果用户选择回车
    显示下一行
    如果用户选择 q
    退出

    函数调用:
    fopen/fclose
    stdin stdout stderr
    fgets/fputs
    getchar/putchar
    printf("\033[7m more? \033[m")

    自己编写:
    如何判断读到文件尾部了?
    feof
    fgets的返回值是0
    fseek 与文件读写位置





    问题:
    选择都要回车
    文字和反白more一起上滚
    百分比
    适应窗口
    重定向: who | more, ls |more
    /dev/tty(流与文件)




    系统调用:文件I/O 如何用Linux学习系统编程
    多用户系统如何知道谁在使用系统?who
    who能做什么?使用一下
    man who (info who; who --help)
    如何实现who?

    阅读ManPages
    man man
    搜索ManPages
    man -k
    man -k XXX | grep -i YYY
    阅读头文件
    参阅see also

    man who
    man -k utmp
    man 5 utmp
    utmp.h
    grep -i XXX -nr /usr/include

    UTMP_FILE
    struct utmp
    #define ut_name ut_user
    ut_line
    #define ut_time ut_tv.tv_sec


    伪代码:

    打开utmp文件
    针对文件
    读取一条记录
    显示记录
    关闭文件


    哪些系统调用?
    man -k file | grep -i read
    see also

    open/read/close

    struct utmp s;
    read( fd, &s, sizeof(s));


    man
    cf fopen fread fclose

    自己编写who:
    read: return value
    /var/run/utmp
    var/run/unp




    问题:空白记录
    ut_type
    时间转换
    man -k time | grep -i transform (trans)
    asctime(3)
    ctime(3)
    localtime(3)
    man -k time | grep -i convert


    查找关键字:至少汉语有想法
    转换

    时间格式
    man -k time | grep -i format
    strftime(3)



    如何复制文件?cp
    cp能干什么?
    cp src dst

    如何实现cp?
    open/close

    open(fff, O_WRONLY|O_CREAT,0644)
    creat(fff, 0644);
    n = read(fd, buf, BUFSIZE);//#define BUFSIZE 4096
    write(fd, buf, n);

    伪代码:
    打开源文件
    创建目标文件
    针对源文件
    把源文件读入缓冲区
    把缓冲区内容写入目标文件
    关闭源文件和目标文件

    自己编写cp:





    系统调用错误处理:
    错误种类:errno
    显示错误消息:perror(3)
    错误处理封装函数
    fork()

    if((pid = fork()) < 0)
    unix_error("fork error");
    return pid;

    学有余力者:
    ac last cat head tail od dd





    read/write可以读取文件内容,如何读取文件名和文件属性?ls

    ls能干什么?
    ls
    ls -l
    ls -a
    ls -lu:最后访问时间
    ls -s:以块为单位的文件大小
    ls -t:按时间排序
    ls -F:显示文件类型

    列出文件目录
    显示文件信息
    如何列出文件目录?
    如何显示文件属性?
    如何判断一个名字是文件还是目录?

    文件树
    文件和目录被组织成目录树(tree),节点是目录或者文件
    目录是一种特殊文件,文件内容就是目录和文件的名字,与utmp类似
    与文件不同,目录不会为空

    如何实现ls?
    man -k direct
    man -k direct | grep -i read
    man -k direct | grep -i entry

    readdir
    see also: opendir closedir
    总结:代码模式
    fopen fread/fwrite fclose
    open read/write close
    opendir readdir closedir

    伪代码:
    打开目录文件
    针对目录文件
    读取目录条目
    显示文件名
    关闭文件目录文件

    自己编写ls:






    传入参数,显示任意目录: ls /tmp; ls /; ls /dev
    分栏
    .开头隐含文件:-a
    排序:man -k sort


    代码库:DRY
    xxx_uitl.h xxx_util.c
    出错处理,参数处理,常用结构...
    xxx_datastru.h xxx_datastru.c
    链表,双向链表
    树,图。。。
    xxx_algorith.h xxx_algorthm.c



    ls -l能做什么?
    显示文件信息:模式(文件类型file(1),访问控制),链接数,文件所有者,组,大小,最后修改时间,文件名

    如何实现ls -l?
    man -k file | grep -i infomation (status, property, attribute)

    stat(1) stat(2)
    struct stat
    最后修改时间:st_mtime ctime
    模式:st_mode
    type ugs rwx rwx rwx

    八进制掩码
    struct stat info;
    if ((info.st_mode & 0170000) == 0040000)
    printf("这是一个目录\n");

    文件类型宏
    #define S_ISDIR(m) (((m)&0170000)) == (0040000))

    struct stat info;
    if (S_ISDIR(info.st_mode))
    printf("这是一个目录\n");

    访问控制属性?比如说本人能不能写?如何定义宏?
    S_ISREG(mod) '-'
    S_ISDIR(mode) 'd'
    S_ISCHR(mode) 'c'
    S_ISBLK(mode)) 'b'


    UID/GID
    /etc/passwd
    getpwuid(3)
    struct passwd

    /etc/group
    getgrgid(3)
    struct group
    自己编写ls -l: ls2.c
    stat(2) struct stat
    getpwuid(3) struct passwd
    getgrgid(3) struct group


    记录计数
    按文件名排序 qsort




    文件属性修改与open/creat

    open/creat umask(1) umask(2)

    chmod(1) chmod(2)
    chown(1) chgrp(1) chown(2)
    touch(1) utime(2)
    mv(1) rename(2)


    学有余力:tree chmod file chown chgrp finger touch



    tree ls-R
    文件包含数据,目录是文件列表,目录构成目录树。
    文件在目录中什么意思?
    用户的主目录(home)是什么意思?
    文件系统(解决的问题参考教材)
    路径:绝对路径,相对路径。pwd
    用户眼中的文件系统
    目录和文件:构成目录树
    目录命令:
    . .. /
    mkdir
    rmdir
    -p
    mv
    cd
    pwd
    ...
    练习:构建一棵目录树
    文件命令:
    cp
    -r
    cat
    mv
    rm
    -r
    ln
    ls
    ...
    目录树命令
    tree
    ls -R
    chmod -R
    du
    find:注意与grep的区别
    ...

    目录树的深度??

    思考:
    文件系统形成目录树,操作系统提供相应的操作命令来协同工作
    目录是什么?
    如何知道文件所处的目录?
    切换目录(cd)是什么意思?
    pwd如何自知道你处的目录?
    第5楼 回到顶楼
  • 20145326蔡馨熠
    2016-10-13 22:42 20145326蔡馨熠
    @娄老师
    老师,p112的例题我算出来是0x48c
    第6楼 回到顶楼
  • 娄老师
    2016-10-14 04:54 娄老师
    @20145326蔡馨熠
    你说的什么题?题号?P112没题目啊。
    第7楼 回到顶楼
  • 20145326蔡馨熠
    2016-10-14 09:35 20145326蔡馨熠
    @娄老师
    老师,第五周学习重点里p112和p113之间,您讲了个例子,关于寄存器的
    第8楼 回到顶楼
  • 娄老师
    2016-10-14 11:14 娄老师
    @20145326蔡馨熠
    我改了。
    第9楼 回到顶楼
  • 20145234黄斐
    2016-11-24 21:32 20145234黄斐
    没有第八章的内容吗
    第10楼 回到顶楼
  • 娄老师
    2016-11-25 03:24 娄老师
    @20145234黄斐
    重点都在QQ群中的相关代码中了。
    第11楼 回到顶楼
登录后才能评论,请先登录注册