找回密码
 加入
搜索
查看: 2411|回复: 3

[系统综合] 问个奇怪的栈溢出

[复制链接]
发表于 2012-3-29 10:39:57 | 显示全部楼层 |阅读模式
非au3的,是VC++的,若版版觉得不合适,请拖进无意区,之所以想在这里问一下
就是模糊记得这里好象有位C或C++的高手,但我不记得是那个了(不然就直接msg了),也不是很确定是在本论坛,因为平逛的论坛多了点,好了不说费话了,下面是问题

====================================================

windows下的C++程序(用VC),有dump、pdb、源码  dump分析显示错误是stack overflow 但是从线程的调用栈来看远没有达到1M的栈空间啊(栈才用了9个页面啊,离默认的1M的栈空间<编译选项是1兆>),崩溃位置是系统函数,_chkstk+0x27下面的test那一行
sub     eax, _PAGESIZE_         ; decrease by PAGESIZE
test    dword ptr [eax],eax     ; probe page.
jmp     short cs10
当前栈信息
0:008> !teb
TEB at 7ffdb000
    ExceptionList:        01a5f410
    StackBase:            01a60000
    StackLimit:           01a57000
eax=01a57000   esp=01a5fefc
看样子是到达栈底了,目前的栈才0x9000,9个页面而已,应该是到达栈底后栈扩展才对啊(最多应该是异常提示),为何会发生崩溃? 求高手解答

=========================================
发表于 2012-3-29 16:31:10 | 显示全部楼层
当年刚毕业时学过C,已经忘得心中无C的境界了,也自学过C++,因为看不懂所以没有坚持学下去,现在真后悔浪费了很多光阴,亡羊补牢,悔之晚矣!现在记性差的一笔。
发表于 2012-3-29 16:56:41 | 显示全部楼层
StackBase是栈最顶部,StackLimit是栈最底部,esp始终指向当前的栈顶。线程运行时esp始终大于等于StackLimit,且小于等于StackBase,当不在这个范围时,就会引发栈溢出的异常。异常发生时,StackBase=01a60000,StackLimit=01a57000,esp=01a5fefc,属于正常范围,不会引发栈溢出的异常。你确定是栈溢出?异常代码是多少?如果不是EXCEPTION_STACK_OVERFLOW(0xC00000FD),就不是栈溢出错误,是其他错误了。
 楼主| 发表于 2012-3-29 22:19:19 | 显示全部楼层
回复 3# pusofalse


    谢谢p版回复
关键是这个发生是几率性的,因为我自己的机子从来没发生过,而是客户机通过CrashReport模块上传到服务器的dump看到的上述信息。
现在我想是不是别的程序把内存占满了,而使_chkstk踩空于是commit一个新页时内测不够了而发生的异常。只能先这样安慰自己了,希望是这种情况,这样就不是程序本身的问题了,不然这种bug最难找了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-14 12:57 , Processed in 0.093834 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表