20155325 2017-2018 1 《信息安全系统设计基础》第六周学习总结(合并课上测试、课下作业、第八章)

实践要求

第六周课上测试-2-ch02

  1. 调用附图代码,编写一个程序 “week0602学号.c",用show_int(), show_float()打印一下你的4位学号,参考教材P33打印出匹配的位序列。

  2. 提交运行结果截图,要全屏,要包含自己的学号信息

3.*************课下把代码推送到代码托管平台**************
4. 参考教材p82,给出出匹配的位序列的推导过程

第六周课上测试-3-ch02

  1. 编写一个程序 “week0603学号.c",运行下面代码:
    1 short int v = -学号后四位
    2 unsigned short uv = (unsigned short) v
    3 printf("v = %d, uv = %u\n ", v, uv);

  2. 在第三行设置断点用gdb调试,用p /x v; p /x uv 查看变量的值,提交调试结果截图,要全屏,要包含自己的学号信息

  3. 分析p /x v; p /x uv 与程序运行结果的不同和联系

第六周课上测试-5-ch03

  1. 通过输入gcc -S -o main.s main.c 将下面c程序”week0603学号.c“编译成汇编代码
    int g(int x){
    return x+3;
    }
    int f(int x){
    int i = 学号后两位;
    return g(x)+i;
    }
    int main(void){
    return f(8)+1;
    }

  2. 参考http://www.cnblogs.com/lxm20145215----/p/5982554.html,使用gdb跟踪汇编代码,在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。提交照片,要有学号信息。

ch02 课下作业

  1. 补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点)
  2. 完成教材 p97 2.96 2.97,要有完备的测试
  3. 发一篇相关内容的博客, 提交博客链接

ch03 课下作业

  1. 补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点)
  2. 在自己的电脑中完成https://www.shiyanlou.com/courses/231缓冲区溢出漏洞实验 实验
  3. 发一篇相关内容的博客, 提交博客链接

实验截图

第六周课上测试-2-ch02

现将整数5325写成二进制形式[1 0100 1100 1101],将二进制小数点左移12位,,去掉开头的1,后面补11(11 = 23-12,单精度小数字段共23位)个0,12加单精度的偏置量127等于139,将其二进制表示左侧加符号位0[1000 1011],再接到刚才去1补0后的值前,得到二进制浮点表示,[0100 0101 1010 0110 0110 1000 0000 0000] 5325.0的二进制表示为就可以通过对照发现匹配的位序列

第六周课上测试-3-ch02

  • 问题:

  • 解决:其实是复制下来后的符号有的是中文的,换掉就好

第六周课上测试-5-ch03

  • 分析题目:“eip(rip),ebp(rbp),esp(rsb),eax(rax)”讲的是什么意思呢?

ebp:栈底
esp:栈顶
eip:寄存器,用来存储CPU要读取指令的地址,CPU通过EIP寄存器读取即将要执行的指令。

链接: 汇编语言里 eax, ebx, ecx, edx, esi, edi, ebp, esp,eip; 栈帧%ebp,%esp详解

第六周课上测试-3-ch02

2.96

2.97

第六周课上测试-5-ch03

  • 问题:直接输入“linux32”不能进入

  • 解决:直接输完就好,就在图片的最后一行命令

  • 问题:没有sh

  • 过程:不知所措,无奈的我重新开了实验,调换了“rm sh”和下一条指令的顺序,然并卵。

  • 问题:攻击失败

  • 过程:之前没有

第八章 异常控制流

  • 并发流:并发流一个逻辑流的执行在时间上与另一个流重叠。

    并发:多个流并发执行的一般现象称为并发。

    多任务:多个进程并发叫做多任务。

    并行:并发流在不同的cpu或计算机上。

  • 理解数组指针、指针数组、函数指针、指针函数的区别

函数指针:重点在指针,表示它是一个指针,它指向的是一个函数。eg: int (*fun)();

指针函数:重点在函数,表示它是一个函数,它的返回值是指针。 eg: int* fun();

数组指针:重点在指针,表示它是一个指针,它指向的是一个数组。int (*fun)[8];

指针数组:重点在数组,表示它是一个数组,它包含的元素是指针 itn* fun[8];

  • man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用
    grep -nr XXX /usr/include :查找宏定义,类型定义

这个在上次的博客中已经写过了
博客

代码托管

上周考试错题总结

  • 下面可以用二进制精确表示的数有

A .
1/2
B .
1/3
C .
1/4
D .
3/8
E .
5/7
正确答案: A C D

  • 对于int x; float f; double d;下面正确的是()

A .
x == (int)(double)x
B .
x==(int)(float)x
C .
f == -(-f)
D .
1.0/2 == 1/2.0
E .
(f+d)-f == d
正确答案: A C D

  • 我们用一个十六进制的数表示长度w=4的位模式,把数字解释为补码,关于其加法逆元的论述正确的是()

A .
0x8的加法逆元是-8
B .
0x8的加法逆元是0x8
C .
0x8的加法逆元是8
D .
0xD的加法逆元是3
E .
0xD的加法逆元是0x3
正确答案: A B D E

  • 大多数计算机使用同样的机器指令来执行无符号和有符号加法。

A .
正确
B .
错误
C .
不确定
正确答案: A 你的答案: B 查看知识点 | 查看解析
8
( 多选题 | 1

  • 我们用一个十六进制的数表示长度w=4的位模式,对于数字的无符号加法逆元的位的表示正确的是()

A .
0x8的无符号加法逆元是0x8
B .
0xD的无符号加法逆元是0xD
C .
0xF的无符号加法逆元是0x1
D .
0xF的无符号加法逆元是1
正确答案: A C D

  • 0<=x,y<2^w, 则
    A .
    x+y的最大值是2^w
    B .
    x+y的最大值是2^w-1
    C .
    x+y的最大值是2^w-2
    D .
    x+y的最大值是2^(w+1)
    E .
    x+y的最大值是2^(w+1)-1
    F .
    x+y的最大值是2^(w+1)-2
    正确答案: F

  • short sx=-12345;
    int x = sx;
    unsigned ux = sx;

A .
sx,x,ux的十六进制表示中的最后两个字节是0xcfc7
B .
ux == 0xffffcfc7
C .
ux == 0x0000cfc7
D .
x == 0xffffcfc7
E .
x == 0x0000cfc7
正确答案: A C D

  • short int v=-12345;
    unsigned short uv=(unsigned short) v;
    那么
    A .
    v=-12345, uv=53191
    B .
    v=uv=0xcfc7
    C .
    v,uv的底层的位模式不一样
    D .
    v,uv的值在内存中是不一样的
    正确答案: A B

  • int x; x的二进制为[10010101], x>>4的值为()

A .
[10010101]
B .
[00001001]
C .
[11111001]
D .
[01010000]
正确答案: C

  • 下面和代码可移植性相关的C语言属性有()

A .

define

B .
typedef
C .
sizeof()
D .
union
正确答案: A B C

  • x=0x12345678,存放在0x200-0x203地址中,小端机器中0x201中的内容是()

A .
0x12
B .
0x34
C .
0x56
D .
0x78
正确答案: C

  • 整数int x在内存中的地址是0x200,0x201,0x202,0x203,那么&x的值是()

A .
不同机器上(大端,小端)不一样
B .
0x200
C .
0x203
D .
0x200-0x203
正确答案: B

  • 与unsigned long等价的声明是()

A .
unsigned
B .
long unsigned
C .
long unsigned int
D .
unsigned long int
正确答案: B C D

  • 一个数x是2的n次方,n=i+4*j,i=2,j=8时,用16进制表示x,最高位是()

A .
2
B .
4
C .
8
D .
0
正确答案: B

  • 实现十进制数向各种进制(2,8,16)的转换,可以使用数据结构中的()来实现。

A .

B .

C .
队列
D .

正确答案: B

  • 根据c89国际标准编译程序prog.c,下面正确的是()

A .
gcc prog.c
B .
gcc -ansi prog.c
C .
gcc -std=c89 prog.c
D .
gcc -std=gnull prog.c
正确答案: B C

结对

  • 本周结对学习情况
    • 20155328
    • 结对照片
    • 结对学习内容
      • 课堂测试、课下作业、第八章

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 16篇 400小时
第一周 9/9 1/1 19/19 熟练下载安装技能,锻炼解决问题能力
第2周 380/389 2/3 26/45 1、7章
第3,4周 1270/1659 3/6 42 2、10章
第5周 20/1679 2/8 实验一&3章
第六周 223/1902 1 9 课堂测试、课下作业、第八章
posted @ 2017-10-29 22:38  难能可贵成功犯傻  阅读(528)  评论(0编辑  收藏  举报