关于局部变量导致堆栈越界的检查

发布者:北极星小鹏最新更新时间:2015-05-18 来源: 51hei关键字:局部变量  堆栈越界 手机看文章 扫描二维码
随时随地手机看文章
一般来说因为局部变量导致堆栈越界的问题比较难查,因为gdb保存的也不是第一现场。

以我的经验来说,首先应该初步估计出问题的流程,然后在该流程中大量加入打印,通过
打印信息缩小排查范围,然后结合代码走读查找BUG。

阅读代码时重点注意,局部变量中的数组大小,以及memset,memcpy类的系统调用,还有就是循环赋值语句。

如果问题无法复现的话,就要碰运气了。
假设局部变量写越界不严重的话,可以手动推导一部分堆栈中的函数调用关系,要求对C语言的压栈过程比较熟悉。

大致上的做法是:
出现SEGV时,查看寄存器esp的值,在根据esp的值打印出堆栈的信息,如果这部分数据不是全零的话,说明堆栈被写越界的太多;否则的话,还是放弃吧。

另一方面要用nm命令把调试目标的符号表取出,最好按地址排序。

接下来,就是手动对比堆栈中的现场和符号表了

关键字:局部变量  堆栈越界 引用地址:关于局部变量导致堆栈越界的检查

上一篇:除法中断处理程序-asm
下一篇:光立方的制作经验杂谈

推荐阅读最新更新时间:2024-03-16 14:02

STM32--堆栈空间
函数的局部变量,都是存放在 栈 里面,栈的英文是:STACK. STACK的大小,可以在STM32的启动文件里面设置,以战舰开发板为例,在startup_stm32f10x_hd.s里面: Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp Heap_Size EQU 0x00000200 Stack_Size EQU 0x00000400 表示栈大小
[单片机]
LabVIEW学习笔记——第四个程序:局部变量与全局变量
局部变量主要用于程序内部传递数据;而全局变量主要适用于多个程序之间传递数据量。 第一个例子是局部变量 首先,仿真信号和滤波器的调用 接着是右键局部变量, 转换为读取 ,然后单击局部变量, 选择项 ,选择 滤波后的信号 这个是整体的项目编程面板 这个是前面板图 第二个例子是全局变量 labview的全局变量在使用的方式上更像是子程序调用。全局变量的建立与局部变量建立相同,双击建好的全局变量,然后向这个新生成的VI程序的前面板,拖放一个 波形图 、 方形的指示灯 、 字符串显示 和 停止开关 。结果如图: 下面
[测试测量]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved