设为首页 - 加入收藏
广告 1000x90
您的当前位置:144177黄大仙有求必应 > 静态缓冲区 > 正文

静态缓冲区溢出问题(高手进)

来源:未知 编辑:admin 时间:2019-05-12

  编译环境 vc++6.0 ,程序是debug 版本,具体地址可能和机器版本有关

  程序原理是缓冲区溢出时即strcpy执行后程序会读一个非法内存地址,从而出现应用程序错误的对话框,而本程序中通过控制溢出时读的地址从而达到执行任意代码的作用

  exit(-1); 防止程序非正常退出,所以我在这里强制结束程序了。

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部同意widebright的观点,我也是这么认为的,因为你代码的实质是修改函数ceshi的ret地址为main的起始地址,而ceshi和main中都有局部变量,且ceshi和main都没有返回,所以栈指针一直都没恢复,新的对main和ceshi的调用都会增加新的局部变量,栈的大小总不会是无限的吧,所以循环到一定时候是会出错退出的。

  此程序和你的等效,注意每次的局部变量ret_addr地址都不同,但我在vc6上测试只循环了32次,暂时不知道为什么(windows还没理解透,汇编还没学到家)。

  至于你的代码,你可以采取一些措施让main多循环几次(想要真正的死循环还是老实点儿while(1)吧,或者goto...),比如把main中的buffer设置为全局:

  另外我自己也写了一个,用了struct和union的作为存储结构来描述栈的话要更清楚和容易理解一些(只在vc6上测试了下,其他编译器可能没效果):

  改成 strncpy(buf,input,10); 不溢出,可以死循环。

本文链接:http://that-a-way.com/jingtaihuanchongqu/4.html

相关推荐:

网友评论:

栏目分类

现金彩票 联系QQ:24498872301 邮箱:24498872301@qq.com

Copyright © 2002-2011 DEDECMS. 现金彩票 版权所有 Power by DedeCms

Top