首页 > 其他 > 详细

溢出道理分析

时间:2014-05-25 18:43:03      阅读:392      评论:0      收藏:0      [点我收藏+]

现在有一个c程序:

bubuko.com,布布扣

bubuko.com,布布扣
打印了abcdefgh这8个字母的十六进制。
现在试试赋给output 全26个字母(超了26-8=18个)看看:
bubuko.com,布布扣
只打印了前8个字母,并有错误信息。查看详细错误信息:
bubuko.com,布布扣
Offset:706f6e6d代表的是溢出的ponm这几个字母的十六进制数。
为什么会这样呢?
先明确两个概念:中断、堆栈(场景保护和恢复,先进后出)。
第一次输入abcdefgh,因为要进入main函数,所以系统把之前的eip、edp保存在堆栈中以便以后的恢复。然后output分配了8个char空间,拷贝abcdefgh到里面,等执行完main函数以后,就把保存在堆栈中的edp、eip恢复就可以了。
 
第二次输入的是26个字符,output分配的还是8个字符。执行完main函数以后,系统要恢复edp、eip。但eip被覆盖成了ponm,但系统并不知道,所以系统会继续执行6d6e6f70。那我们可以把eip覆盖成我们想要去的地方。也就是让电脑运行我们想运行的程序。

溢出道理分析,布布扣,bubuko.com

溢出道理分析

原文:http://www.cnblogs.com/dadada/p/3750686.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!