有关堆栈溢出(in vs 2005)的读书笔记--堆栈中 申请大数组

部分原创

 

66下一步

Vs 堆栈 理论修改的上限是多少

问题2: 全局变量去 最大的上限是多少?

堆栈(休养版本测试)

2012年3月31日17:31:27 3月

 

 

clip_image001

 

clip_image002

 

clip_image003

10^5 10^6数组,导致vs…

当前:搭好脚手架。

 

改进: 修改vs系数。(byte 为单位i

改进二: 细化 时间粒度。

 

 

以上是我在项目汇总的修改。下面是阅读笔记

 

 

 

 

 

test dword ptr [eax],eax ; probe page.

2010年05月18日 星期二 20:19

局部数组变量定义超过所分配的最大空间

-----------------------------------

Posts Tagged 变量

局部数组变量定义所分配的最大空间为多少?如何设置大小

有两个程序

A:

  1. #include "stdafx.h"
  2. int _tmain(int argc, _TCHAR* argv[])
  3. {
  4. int nArray[256000] = {0};
  5. nArray[1] = 5;
  6. printf("array 1 is %d",nArray[1]);
  7. return 0;
  8. }

B:

  1. #include "stdafx.h"
  2. int _tmain(int argc, _TCHAR* argv[])
  3. {
  4. int nArray[260000] = {0};

    //66 大于 1m

  5. nArray[1] = 5;
  6. printf("array 1 is %d",nArray[1]);
  7. return 0;
  8. }

 

大家通过运行可以发现,A是可以正常运行的,B虽然编译通过了,可是当运行时就会弹出错误

错误的原因,就是栈溢出

 

局部变量的申请空间是存放于栈中,windows里默认栈内存是1M

所以当申请空间大于1M时就会出现溢出错误

通过debug就会进入以下文件chkask.asm

page ,132

title chkstk – C stack checking routine

;***

;chkstk.asm – C stack checking routine

;

; Copyright (c) Microsoft Corporation. All rights reserved.

;

;Purpose:

; Provides support for automatic stack checking in C procedures

; when stack checking is enabled.

;

;*******************************************************************************

.xlist

include cruntime.inc

.list

; size of a page of memory

_PAGESIZE_ equ 1000h

CODESEG

page

;***

;_chkstk – check stack upon procedure entry

;

;Purpose:

; Provide stack checking on procedure entry. Method is to simply probe

; each page of memory required for the stack in descending order. This

; causes the necessary pages of memory to be allocated via the guard

; page scheme, if possible. In the event of failure, the OS raises the

; _XCPT_UNABLE_TO_GROW_STACK exception.

;

; NOTE: Currently, the (EAX < _PAGESIZE_) code path falls through

; to the "lastpage" label of the (EAX >= _PAGESIZE_) code path. This

; is small; a minor speed optimization would be to special case

; this up top. This would avoid the painful save/restore of

; ecx and would shorten the code path by 4-6 instructions.

;

;Entry:

; EAX = size of local frame

;

;Exit:

; ESP = new stackframe, if successful

;

;Uses:

; EAX

;

;Exceptions:

; _XCPT_GUARD_PAGE_VIOLATION – May be raised on a page probe. NEVER TRAP

; THIS!!!! It is used by the OS to grow the

; stack on demand.

; _XCPT_UNABLE_TO_GROW_STACK – The stack cannot be grown. More precisely,

; the attempt by the OS memory manager to

; allocate another guard page in response

; to a _XCPT_GUARD_PAGE_VIOLATION has

; failed.

;

;*******************************************************************************

public _alloca_probe

_chkstk proc

_alloca_probe = _chkstk

push ecx

; Calculate new TOS.

lea ecx, [esp] + 8 – 4 ; TOS before entering function + size for ret value

sub ecx, eax ; new TOS

; Handle allocation size that results in wraparound.

; Wraparound will result in StackOverflow exception.

sbb eax, eax ; 0 if CF==0, ~0 if CF==1

not eax ; ~0 if TOS did not wrapped around, 0 otherwise

and ecx, eax ; set to 0 if wraparound

mov eax, esp ; current TOS

and eax, not ( _PAGESIZE_ – 1) ; Round down to current page boundary

cs10:

cmp ecx, eax ; Is new TOS

jb short cs20 ; in probed page?

mov eax, ecx ; yes.

pop ecx

xchg esp, eax ; update esp

mov eax, dword ptr [eax] ; get return address

mov dword ptr [esp], eax ; and put it at new TOS

ret

; Find next lower page and probe

cs20:

sub eax, _PAGESIZE_ ; decrease by PAGESIZE

test dword ptr [eax],eax ; probe page.

 

jmp short cs10

_chkstk endp

end

 

提示栈溢出

所以解决此问题的方法就是扩大栈空间的大小

方法为

项目->属性->链接器->系统->堆栈保留大小

注:这里填的是字节数

如果你想把他扩大为2M的话,

1024*1024*2 = 2097152

然后再编译运行的话A,B就都可以通过了

 

源文档 <http://hi.baidu.com/linzch/blog/item/e5107ff0a6cf6ccf7831aa02.html>

 

转载于:https://www.cnblogs.com/titer1/archive/2012/03/31/2427422.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

烧脑又过瘾!这个被严重低估的学习方法,看完瑟瑟发抖!

▲ 点击查看科学家曾在基于脑科学和认知科学后得出一个“学习的金字塔”理论。就是下面这张图&#xff1a;最顶端的就是我们所谓的“知识”&#xff0c;但为了可以达到这个顶端&#xff0c;下面有一系列的支撑能力。而引申出来的核心概念&#xff0c;就叫“玩中学”。不要想当然…

为什么手机最后 10% 的电量很不耐,最后1%的电量最耐用?

全世界只有3.14 % 的人关注了爆炸吧知识手机电量这玩意一直都是个玄学问题。为什么我的小手机&#xff0c;最后 1% 的电量最耐用&#xff0c;每次都够我看完一个十分钟的视频。又或者是为什么我的小手机&#xff0c;最后 10% 的电量很不耐用。。。每次电池报警还有 10% 的电量&…

使用identity+jwt保护你的webapi(三)——refresh token

前言上一篇已经介绍了identity的注册&#xff0c;登录&#xff0c;获取jwt token&#xff0c;本篇来完成refresh token。开始开始之前先说明一下为什么需要refresh token。虽然jwt token有很多优点&#xff0c;但是它的缺点也是非常明显。由于jwt无状态的特性&#xff0c;所以j…

一个10*10的正方形里,最多可以放多少个直径为1的圆?为啥不是100个?

祝大家元宵节快乐知识君曾经给大家出了一道题。↓Q&#xff1a;在一个10*10的正方形里&#xff0c;最多可以放多少个直径为1的圆&#xff1f;为啥不是100个&#xff1f;关于这道题&#xff0c;后台就收到了许多留言&#xff0c;大家纷纷给出了不同的答案。五花八门的答案&#…

【开源框架】:解决方案级别的代码生成器 WebFirst

框架描述WebFirst 是一新代的 代码生成器&#xff0c;用法简单&#xff0c;功能强大&#xff0c;支持多种数据库 &#xff0c;具体功能如下&#xff1a;一、 建库、CodeFirst方式在线建表&#xff0c;没用到CodeFirst的用户可以用工具轻松体验&#xff0c;支持公共字段二、导出…

在netbeans下使用调试PHP的插件XdeBug

本人的开发环境: wamp最新官网wampserver2.2d-x32版。 下载点&#xff1a;http://nchc.dl.sourceforge.net/project/wampserver/WampServer%202/WampServer%202.2/wampserver2.2d-x32.exe PHP&#xff1a;5.3.10 apache &#xff1a;2.2.21 要使用到NetBeans的调试功能&#xf…

老娘不就是没化妆吗?你几个意思?

1 可能是环境的原因唤醒了雪橇犬的祖传技能▼2 这是花仙子吧&#xff01;怎么能生的出这么好看的崽▼3 你什么表情&#xff1f;老娘不就是没化妆吗▼4 我们是专业的&#xff0c;一般不会笑除非忍不住▼5 你知道小兔子会游泳吗▼6 狗子的快乐你体会不了▼7 谁能告诉我这到…

790页微软官方《.Net核心编程》高清版PDF,提供下载

本文档由微软技术专家编写&#xff0c;从1.1版本持续维护升级至今&#xff0c;开篇就详细对比了各版本中的差异&#xff0c;内容包含了ASP.NET Core、Blazor、WebAPI、SignalR、gRPC、EF Core、云原生&#xff0c;既是最权威的&#xff0c;也是最全面的&#xff0c;是学习跨平台…

真烧脑!60种小学奥数分类题型大汇编!做了几道题,感觉身体被掏空……

全世界只有3.14 % 的人关注了爆炸吧知识很多的家长都在问&#xff1a;小学奥数怎么学&#xff1f;有哪些重点&#xff1f;需要大量练习吗&#xff1f;其实&#xff0c;数学的题型万变不离其宗&#xff0c;了解题型&#xff0c;领悟题目的思路方法&#xff0c;一定胜过盲目狂练5…

保护我方Id | ASP.NET Core Web API使用加密Id

前言上次&#xff0c;我们介绍了hashids.net&#xff0c;可以将数值型Id加密成无意义的字符串&#xff0c;但是通过这些字符串又可以反向映射出真实的Id以供内部使用。比如B站的播放链接https://www.bilibili.com/video/BV1xK4y1VXXX应该就是这种实现方式。但是&#xff0c;我们…

用java写注册表单_利用HTML表单标签编写一个注册页面

今天我们来写一个注册页面form表单先来利用表单标签制作一个简单的注册页面,给大家说说标签的结构:页面结构大体就是这样子的~利用HTML表单标签编写一个注册页面表单标签:所有需要提交到服务器端的表单项必须使用包起来~form标签的属性:action:整个表单提交的位置(可以是一个页…

我被Dapr点燃

Dapr的热度个人认为才刚刚热起来&#xff0c;9月份我写了Dapr .NET Core实战一共10篇&#xff0c;从基础概念到简单的实战&#xff0c;但是有很多人感兴趣&#xff0c;具体表现在我个人维护的QQ群&#xff0c;人数从80人左右&#xff0c;增加到了155&#xff0c;将近增加了1倍…

Http Only Cookie保护AccessToken

【导读】JWT认证方式目前已被广泛使用&#xff0c;一直以来我们将token放在请求头中的Authorization中&#xff0c;若通过此种方式&#xff0c;一旦token被恶意窃取&#xff0c;攻击者可肆意对用户可访问资源进行任意索取我们大多都是通过登录成功后&#xff0c;响应AccessToke…

当女朋友生气了而你却没发现 !!!

1 当女朋友生气了而你却没发现。。诶&#xff0c;你咋不吃呢&#xff1f;2 会说话的尾巴。。尾巴&#xff1a;人呢&#xff01;&#xff01;3 小树枝&#xff1a;生命中不能承受之重&#xff01;心疼小树枝&#xff01;4 土耳其冰淇淋小哥终于被反杀了&#xff01;天道好轮…

弱引用什么时候被回收_Java基础 强引用、弱引用、软引用、虚引用

前言在ThreadLocal源码中&#xff0c;其中嵌套类ThreadLocalMap中的Entry继承了WeakReferenc。Java中提供这四种引用类型主要有两个目的&#xff1a;第一是可以让程序员通过代码的方式决定某些对象的生命周期&#xff1b;第二是有利于JVM进行垃圾回收。强引用(StrongReference)…

再译《A *路径搜索入门》之四

2019独角兽企业重金招聘Python工程师标准>>> ■在A *方法总结 Summary of the A* Method 好了&#xff0c;现在你通过解释已经走了&#xff0c;让我们奠定了一步一步的方法&#xff0c;在同一个地方&#xff1a; Okay, now that you have gone through the explanat…

记一次 .NET 某电商定向爬虫 内存碎片化分析

一&#xff1a;背景 1. 讲故事上个月有位朋友wx找到我&#xff0c;说他的程序存在内存泄漏问题&#xff0c;寻求如何解决&#xff1f; 如下图所示&#xff1a;从截图中可以看出&#xff0c;这位朋友对 windbg 的操作还是有些熟悉的&#xff0c;可能缺乏一定的实操经验&#xff…

php 合成图片 透明,2020-05-19 php实现透明png多图合成

图片合成的流程一般是&#xff0c;获取图像资源——合成——输出。png图片&#xff0c;一般就用imagecreatefrompng()获取资源。不过这个资源获取后是有白底的。所以需要用imagesavealpha()进行图像处理&#xff0c;得到包含有透明背景的图像。//原始图像$dst "img/1.png…

ArcEngine 没有Esri.ArcGis.GeoAnalyst 命名空间

http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid69977&extrapage%3D1&ordertype1 AE安装的时候分为Core和Extension. Esri.ArcGis.GeoAnalyst位于Extension里面. (1)确保安装的时候是完全安装 (2) 转载于:https://www.cnblogs.com/imihiroblog/archive/2012/04/1…

微信功能“拍一拍”,都有谁在“拍”你?

全世界只有3.14 % 的人关注了爆炸吧知识微信新功能总在悄咪咪更新&#xff0c;“拍一拍”一出&#xff0c;很多小伙伴都会收到各种群里面千奇百怪的“拍一拍”&#xff0c;到底都是谁在偷偷关注你&#xff1f;真正决定人与人之间的差距的&#xff0c;其实是我们对事物的见识与内…