首页
社区
课程
招聘
[求助]call调用子程序内部sub esp,xx 导致堆栈用完了怎么办
发表于: 2016-12-13 18:21 4920

[求助]call调用子程序内部sub esp,xx 导致堆栈用完了怎么办

2016-12-13 18:21
4920
冒昧的来问一个比较冷门的问题

内联汇编代码中 , call调用子程序内部sub esp,xx 导致堆栈用完了怎么办

比如  

_asm {

sub esp,0x1000
......
sub esp,0x1000  // 在这里如果是 esp 的值不够分配了怎么出来这个问题 导致了内存不可访问了
...
..

}

当然我知道 如果是自己创建一个线程调用可以在线程调用创建前把堆栈设置比较大可以处理这个问题

但是如果是在主线程的情况下调用呢  怎么样在调用之前 把这个堆分配大一点

正常情况下 大家都说这个是编译器系统会自动优化 ,程序不会有这个情况 但是 要自己内联汇编写代码就囧了

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
分配内存不得?
2016-12-13 18:27
0
雪    币: 204
活跃值: (69)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
esp 的 栈中的内存  不是虚拟内存和堆内存 这个怎么分配

http://blog.chinaunix.net/uid-11959329-id-2797040.html
2016-12-13 18:36
0
雪    币: 248
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
开启缓冲区检查
2016-12-13 18:51
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
5
什么需求需要用到这么大的栈。。。
2016-12-13 19:07
0
雪    币: 209
活跃值: (818)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
栈由系统自动分配,速度较快,程序员是无法控制的。
栈的大小是有默认值的,如果申请的临时变量太大的话就会超过栈的大小,造成栈溢出。
默认值为1MB
最小值为4Byte
可以在Visual C++中设置:
项目->属性->链接器->系统->堆栈保留大小
2016-12-13 19:32
0
雪    币: 689
活跃值: (422)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
7
百度"chkstk"
2016-12-13 19:49
0
雪    币: 204
活跃值: (69)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
内联汇编中 修改了 esp 寄存器的值后 , 就算是开启缓冲区检查栈内存溢出没效果吧



主程序不是自己写,所以想了很久了



我先百度看看吧
2016-12-14 08:35
0
游客
登录 | 注册 方可回帖
返回
//