首页
登录
从业资格
基于 Windows32 位系统分析下列代码,回答相关问题 。 void Ch
基于 Windows32 位系统分析下列代码,回答相关问题 。 void Ch
题库
2022-08-02
65
问题
基于 Windows32 位系统分析下列代码,回答相关问题 。void Challenge(char *str) { char temp[9]={0}; strncpy(temp,str,8); printf("temp=%s\n",temp); if(strcmp(temp"Please!@")==0){ printf("KEY: ****"); }}int main(int argc,char *argv[ ]){ Char buf2[16] Int check=1; Char buf[8] Strcpy (buf2, "give me key! !"); strcpy(buf,argv[1]); if(check==65) { Challenge(buf); } else { printf("Check is not 65 (%d) \n Program terminated!!\n",check); } Return 0; }【问题 1】(3 分)main 函数内的三个本地变量所在的内存区域称为什么?它的两个最基本操作是什么? 【问题 2】(3分) 画出buf,check,buf2 三个变量在内存的布局图。
【问题 3】(2分)应该给程序提供什么样的命令行参数值(通过argv变量传递)才能使程序执行流程进入判断语句 If(check=65)....然后调用challenge( )函数。 【问题4】(4分)上述代码所存在的漏洞名字是什么,针对本例代码,请简要说明如何修正上述代码以修补次漏洞。
选项
答案
解析
问题1解析:一个程序在内存中分为程序段、数据段和堆栈三部分。程序段里放着程序的机器码和只读数据;数据段放程序中的静态数据;动态数据则通过堆栈来存放,也就是说,变量存在的内存区域是堆栈;堆栈的特性是后进先出 (LIFO) ,即先进入堆栈的对象最后出来,最后进入堆栈的对象最先出来。堆栈两个最重要的操作是 PUSH和POP将对象放入堆栈顶端(最外边,内存高端);POP 操作实现一个逆向过程,把顶端的对象取出来。问题2解析:首先根据3个变量定义的先后顺序,buf2先压入堆栈(在最底下),然后是check,最后是buf(最上面);空间大小根据C语言语法即可确定。buf2是16个字节,check是整型变量占用4个字节,buf是字符数组,有8个字符,每个字符占一个字节,共占用8个字节。所以buf、check、buf2三个变量在内存的布局图如下所示:
问题3解析: 该代码按正常流程走下来,因check的值为1,不满足check==65,所以会执行else语句,所以这道题的关键在于通过什么样的方式来改变check的值,使其等于65,满足条件然后调用Challenge()函数。 再来分析strcpy() 函数这个函数,该用来复制字符串,其原型为:char *strcpy(char *dest, const char *src);【参数】dest 为目标字符串指针,src 为源字符串指针。 注意:src 和 dest 所指的内存区域不能重叠,且 dest 必须有足够的空间放置 src 所包含的字符串(包含结束符NULL)。 【返回值】成功执行后返回目标数组指针 dest。strcpy() 把src所指的由NULL结束的字符串复制到dest 所指的数组中,返回指向 dest 字符串的起始地址。注意:如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出。主函数在执行时会接收用户输入信息放入指针数组argv中,而指针数组存放的信息又会通过strcpy复制到buf数组里面,buf数组的长度为8个字符,一旦用户输入数据长度大于8个字符就会溢出,溢出部分就会覆盖其他变量的值,从上面堆栈中的数据存储方式可以看出,buf数组一旦溢出,溢出部分就会覆盖check的值;根据题目意思,只要令溢出部分的值为65即可令check=65,从而满足条件。所以可以先任意输入8个字符堆满buf数组,再输入时就是溢出部分,可以输入大写字母A,因check为整形数据,所以将字符赋给整形变量时,会按其ASCII码值进行处理,即A的ASICC值为65,从而可以把check值变成65满足条件。问题4解析: 前面分析strcpy() 函数,当其参数 dest 所指的内存空间不够大,可能会造成缓冲溢出。而strncpy()用来复制字符串的前n个字符,其原型为: char * strncpy(char *dest, const char *src, size_t n); 【参数说明】dest 为目标字符串指针,src 为源字符串指针。 strncpy()会将字符串src前n个字符拷贝到字符串dest。在编写程序时通常用strncpy()函数来取代strcpy()函数防止缓冲区溢出。
转载请注明原文地址:https://tihaiku.com/congyezige/2414775.html
本试题收录于:
中级 信息安全工程师题库软件水平考试初中高级分类
中级 信息安全工程师
软件水平考试初中高级
相关试题推荐
阅读以下关于某四轴飞行器系统设计的说明,回答下列问题。 [说明]在某四
在面向对象分析过程中,用概念模型来详细描述系统的问题域,用()来表示概念模型。
软件测试可分为静态测试和动态测试,以下不属于静态测试的是()。A.代码检查
以下关于质量保证的叙述中,错误的是()。A.质量保证主要任务是识别与项目相关的
在面向对象方法中,将逻辑上相关的数据以及行为绑定在一起,使信息对使用者隐蔽称
位于主存和嵌入式微处理器内核之间,存放最近一段时间微处理器使用最多的程序代码和数
以下正确描述嵌入式程序代码生成过程的是()。A.高级语言代码→目标代码→汇
假设以下代码运行环境为32位系统,其中,__attribute__((packe
算法是为解决某个问题而设计的步骤和方法。以下关于算法的叙述中,不正确的是____
在某嵌入式系统中采用PowerPC处理器,若C语言代码中定义了如下的数据类型变量
随机试题
Howmanyattacksandclasheswerereportedinthisnews?[br][originaltext]
Peoplewhoarehitbylightningandsurviveoftenhavelong-termeffects.Th
We’renowwitnessingtheemergenceofanadvancedeconomybasedoninformati
合理选择和使用施工机械设备,是保证施工质量的重要环节。机械设备的使用应贯彻“人机
A.无社区的概念,不了解所在社区的健康问题,只对就医的病人提供非连续性的照顾
WHO规定白天理想的噪声标准为A.20~25dB B.30~35dB C.5
下述说法,哪一项不是“金”的特性?( )A.从革 B.沉降 C.肃杀 D
( )对于群众性的合理化建议活动,技术上的小发明、小革新是非常适合的,也可以与
“药物信息的管理”的形式包括A.信息网络管理 B.信息管理软件 C.传统的剪
某医生想把在研究某新药的治疗效果时收集到资料(见下表)绘制成疗效构成统计图,宜选
最新回复
(
0
)