首页 > PE文件格式, Windows SDK > 神奇的栈溢出

神奇的栈溢出

最近,我在写一个简单一点的PE文件分析器,也就是把PE里面的一些信息反馈到界面上面来,界面的话模仿了LordPE的编辑器界面。
我觉得要动手去解析这些结构,才会对PE文件有一个更加深刻的了解。

也许有人会问,什么是PE?PE是Windows下可执行程序的一种格式,PE的意思是Portable Executable(可移植的执行体),所有Win32执行体都是用PE文件格式,其中包括SYS, DLL, EXE, COM, OCX等。

作为一个程序员,你可以不了解PE的具体结构,但是如果你能仔细去研究一下这个PE结构,将会从中学习到大量知识。

还是说说标题里面说的栈溢出吧。
我在写时间戳到具体时间的转换的时候,出现了神奇的栈溢出,stackoverflow??错误停留在很简单的一个函数调用上,我的第一反应是怎么可能?那就多测试几遍,这个错误一直重复着。

栈溢出,就是说栈的空间已经不够了。

什么时候会用到栈的空间呢?一般的指令不可能把栈搞到溢出。通常是局部变量和函数调用(函数参数和返回地址)会占用栈的空间。就我个人的经验而言,栈溢出不过两种情形:如果开一个很大的局部变量,会造成栈溢出;如果函数无穷递归,也是会造成栈溢出的

这里就可以把可能的原因归纳到第二点上来(因为我根本没有用到大量栈空间来存放局部变量)。果不其然,经过仔细的研究,发现其中有着这么一处错误:
A控件内容发生变化,就会根据A控件的内容换算出一个值,然后把这个值来设置控件B。而如果B控件内容发生变化,就会根据B控件的内容换算出一个值,然后把这个值来设置控件A。这样两个控件不停的给对方,函数不停的调用,最终导致栈溢出了

最后,我发现我原来的思路就是导致栈溢出的原因。O(∩_∩)O~顺便贴几张图片(纯SDK编写):
主界面(模仿LordPE,程序功能正在进一步实现中)
程序主界面
时间戳转换
时间戳转换
关于,呵呵(静态文本超链接用了控件子类化
关于对话框


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> 神奇的栈溢出
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



  1. 2011年4月14日22:51 | #1

    相信博主肯定对软件破解很在行吧,什么时候教教我哦

    [回复]

  2. 2011年4月14日22:52 | #2

    好久没来了。

    [回复]

  3. jxbm
    2013年7月20日06:11 | #3

    博主你好,请问可否分享一下分析器的源码 万分感谢~ [em022]

    [回复]

    代码疯子 回复:

    @jxbm, http://www.programlife.net/pe-coff-specification.html 发在这篇文章了,上面有直接下载的链接

    [回复]