20155338 ch02 ch03课下作业
20155338 ch02 ch03课下作业
要求:
1、补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点)
课上测试-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 与程序运行结果的不同和联系
课上编写完代码,在gdb调试中输入了题目要求的命令,但动作比较慢,没来得及提交上,课后下来上网查了查p/x v 和 p/x uv 之间的联系,也算get到一个知识点。

p/x v和 p/x uv之间的联系在于有符号数和无符号数之间的转换,其数值可能会变,但位模式不会变
课上测试-5-ch03
1、通过输入gcc -S -o main.s main.c将下面c程序编译成汇编代码
2、参考 博客使用gdb跟踪汇编代码,在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。提交照片,要有学号信息。

使用disassemble命令获取汇编代码,info registers查看寄存器的值。根据参考博客,ret命令将栈顶弹给%eip,在执行下一条汇编语句之前,设置:display /i $pc,此命令在每次程序中断后可以看到即将被执行的下一条汇编指令 ,/i表示以十六进制显示,$pc表示当前汇编命令,si执行一条汇编指令。将其变化记录即可。

2、缓冲区溢出漏洞实验
1、输入命令安装一些用于编译32位C程序的东西:

shellcode
一般情况下,缓冲区溢出会造成程序崩溃,在程序中,溢出的数据覆盖了返回地址。而如果覆盖返回地址的数据是另一个地址,那么程序就会跳转到该地址,如果该地址存放的是一段精心设计的代码用于实现其功能,输入shellcode.c

漏洞程序stack.c
程序会读取一个名为“badfile”的文件,并将文件内容装入“buffer”。

攻击程序exploit.c

“\x??\x??\x??\x??”
处需要添上shellcode保存在内存中的地址,因为发生溢出后这个位置刚好可以覆盖返回地址。
strcpy(buffer+100,shellcode); 这一句又告诉我们,shellcode保存在 buffer+100 的位置。
现在我们要得到shellcode在内存中的地址,需要gdb测试:

然后编译exploit.c程序:gcc -m32 -o exploit exploit.c
但不知道为什么我试了好几次,有出现段错误,然后又进行gdb测试,但后来一直出现“非法命令”,这点还未弄明白,后面我也会请教一下老师同学。
3、完成教材p97 2.96 2.97
2.96
题目:遵循位级浮点编码规则,实现如下原型的函数:
int float_f2i(float_bits f);
对于浮点数f,这个函数计算(int)f。如果f是NaN,你的函数一个向零舍入。如果f不能用整数表示(例如,超出表示范围,或者他是一个NaN),那么函数一应该返回0x80000000.测试你的函数,对参数f可以取得所有2^32个值求值,将结果与你使用的机器的浮点运算得到的结果相比较。
遇到的问题:
对‘pow’未定义的引用;导致编译不出来

解决过程:
使用math.h中声明的库函数还有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm.so库文件中(这些库文件通常位于/lib目录下),-lm选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找。
知道后加上-lm,编译成功了

2.97
遵循位级浮点编码规则,实现具有如下原型的函数:
Compute (float) i
float_bitsfloat_i2f(inti);
对于参数i,这个函数计算(float)i的位级表示。
测试你的函数,对参数f可以取的所有2^32个值求值,将结果与你使用机器的浮点运算得到的结果相比较。

进行编译:

运行结果:

20155338 ch02 ch03课下作业的更多相关文章
- CH03 课下作业
CH03 课下作业 缓冲区溢出漏洞实验 缓冲区溢出攻击:通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的. 缓冲区溢出 ...
- 20155212 ch03 课下作业
T4 题目 通过输入gcc -S -o main.s main.c 将下面c程序"week0603学号.c"编译成汇编代码 int g(int x){ return x+3; } ...
- ch03 课下作业——缓冲区溢出漏洞实验
一.实验简介: 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭 ...
- 2018-2019-1 20165205 ch02 课下作业
ch02 课下作业 2.96 代码 #include <stdio.h> #include <stdlib.h> typedef unsigned float_bits; fl ...
- 20165302 ch02 课下作业
20165302 ch02 课下作业 作业内容 补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点) 完成教材 p97 2.96 2.97,要有完备的测试 发一篇相关内容的博客, ...
- 20155212 ch02 课下作业
20155212 ch02 课下作业 T1 题目 参考附图代码,编写一个程序 "week0601学号.c",判断一下你的电脑是大端还是小端 相关知识 小端法:最低有效字节在最前面 ...
- 2018-2019-1 20165330 《信息安全系统设计基础》第六周课上测试ch02&课下作业
课上测试 测试-3-ch02 任务详情 编写一个程序 "week0203学号.c",运行下面代码: 1 short int v = -学号后四位 2 unsigned short ...
- 20175221 MyCP(课下作业,必做)
MyCP(课下作业,必做) 任务详情 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: - java MyCP -tx XXX1.txt XXX2 ...
- 20175221 《Java程序设计》迭代和JDB(课下作业,选做):
20175221 <Java程序设计> 迭代和JDB(课下作业,选做): 任务详情 1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功 ...
随机推荐
- metasploit 渗透测试笔记(基础篇)
0x00 背景 笔记在kali linux(32bit)环境下完成,涵盖了笔者对于metasploit 框架的认识.理解.学习. 这篇为基础篇,并没有太多技巧性的东西,但还是请大家认真看啦. 如果在阅 ...
- Alpha Scrum5
Alpha Scrum5 牛肉面不要牛肉不要面 Alpha项目冲刺(团队作业5) 各个成员在 Alpha 阶段认领的任务 林志松:督促和监督团队进度,前端页面编写 林书浩.陈远军:界面设计.美化 吴沂 ...
- 【JavaScript】particle
这是js实现的粒子动画,有两种模式,分别是zoom和line,它们对应的效果不同,但是原理都相同,具体分析如下: 部分程序如下: var p = this; p.originParams = orig ...
- Kali-linux Arpspoof工具
Arpspoof是一个非常好的ARP欺骗的源代码程序.它的运行不会影响整个网络的通信,该工具通过替换传输中的数据从而达到对目标的欺骗.本节将介绍Arpspoof工具的 使用. 9.8.1 URL流量操 ...
- Autoware 安装流程
1. 前言 最近一个项目采用Autoware的无人驾驶系统,在安装工控机的过程中,踩了不少坑,留下记录,造福后人. 相关的下载在我的百度网盘,大家自行下载.链接: https://pan.baidu. ...
- PHP面试系列之Linux(一) ----- Linux基础
一.系统安全 sudo:以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行. su:用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码. ...
- DPI在SDN中的部署方式
目录 在sdn中的部署分类 将DPI部署到基础设施层 将DPI部署到控制层 将DPI部署到应用层 个人总结 参考文献 在sdn中的部署分类 DPI 可以分别部署到SDN的基础设施层.控制层和应用层. ...
- OO课程总结
OO课程总结 OO终于划上了句号,这学期熬夜熬得最多的一门课,掉了最多头发的一门课. 一.测试与正确性 测试是最最最常见的用来找到程序错误以及验证程序正确的手段,在之前的作业中,写完代码还是会存在很多 ...
- MySQL学习【第十三篇日志管理】
一.MySQL日志类型 日志文件 选项 文件名/表名称 程序 错误日志 --log-error host_name.err N/A 常规日志 --general_log host_name. ...
- 嵌入式C语言自我修养 09:链接过程中的强符号和弱符号
9.1 属性声明:weak GNU C 通过 __atttribute__ 声明weak属性,可以将一个强符号转换为弱符号. 使用方法如下. void __attribute__((weak)) fu ...
