码迷,mamicode.com
首页 > 其他好文 > 详细

溢出道理分析

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

标签:style   blog   c   http   a   width   

现在有一个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

溢出道理分析

标签:style   blog   c   http   a   width   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!