一个变量越界导致破坏堆栈的bug

2023-11-05

前一段时间在商用系统上出现了core dump,原因是由于一个局部变量写越界导致堆栈被破坏了。在这里,我把这个bug分享一下,希望给需要的朋友一点帮助。简化的代码如下:

typedef struct
{
	......
} A;

void func1(char *p)
{
	......
}

void main(void)
{
	A a;
	A *p = &a;
	char b[10];
	
	......
	/* 
	 * 这个程序运行在SPARC处理器上, 而SPARC处理器的堆栈生长
	 * 方向是从高地址向低地址生长的.
	 * 这个函数里会把b这个数组写越界,导致p这个变量被破坏, 
	 * 结果在下面访问p时,是一个无效的值,导致core dump.
	 */
	func1(b);
	printf("%p\n", p);
	......
	
	return;
}

通过分析这个bug,分享一下我的心得体会:
(1)SPARC处理器是当年SUN公司开发的一款RISC处理器,如果有朋友从事Solaris软件开发,应该还是会接触到的。我一直觉得作为底层软件工程师,还是应该对处理器结构(包括汇编语言)有尽可能多的了解,这样对我们分析和解决问题都会有很大帮助。比方说,在分析这个bug时,如果知道SPARC处理器的堆栈生长方向是从高地址向低地址生长的,就会让我们把注意力集中在变量定义在p后面的变量上,这样就有
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个变量越界导致破坏堆栈的bug 的相关文章

随机推荐

  • Java之继承与多态

    目录 一 继承 1 为什么需要继承 2 继承概念 3 继承的语法 4 父类成员访问 1 子类中访问父类的成员变量 2 子类中访问父类的成员方法 5 super关键字 6 子类构造方法 7 super和this 8 再谈初始化 9 prote
  • 互联网的两大组成及其特点

    1 互联网由两大部分组成 边缘部分及其核心部分 2 边缘部分 主要由连接在互联网上的主机组成 这部分是直接与用户相连的 在边缘部分主要的活动是两个主机之间的通信 其通信方式可以分为两类 1 客户 服务器方式 就是客户机向服务器请求服务器 客
  • 14 openEuler DNF(YUM)配置管理

    文章目录 14 1 DNF配置文件 14 1 1 配置main部分 14 1 2 配置repository部分 14 1 3 显示当前配置 14 2 创建本地软件源仓库 14 3 添加 启用和禁用软件源 14 3 1 添加软件源 14 3
  • paste0函数在R语言中的应用

    paste0函数在R语言中的应用 在R语言中 paste0函数是一个非常有用的函数 它可以将多个输入组合成一个字符串 这个函数的使用非常简单 只需要将要组合的内容作为参数传递给paste0函数即可 在本文中 我们将通过实例来演示paste0
  • 全球及中国装备制造产业投资战略及产销需求预测报告2021-2027年版

    全球及中国装备制造产业投资战略及产销需求预测报告2021 2027年版 HS HS HS HS HS HS HS HS HS HS HS HS 修订日期 2021年10月 搜索鸿晟信合研究院查看官网更多内容 第一章 装备制造业概述 1 1
  • Redraiment的走法

    题目描述 题目描述 Redraiment是走梅花桩的高手 Redraiment总是起点不限 从前到后 往高的桩子走 但走的步数最多 不知道为什么 你能替Redraiment研究他最多走的步数吗 样例输入 6 2 5 1 5 4 5 样例输出
  • LabVIEW结合神经网络在图像目标检测中的应用

    神经网络在图像识别中的应用 摘要 随着大数据时代的快速发展 图像识别技术的重要性与日俱增 大量的数据集和强大的服务器计算能力 更是如虎添翼 相比传统的图像分类方法已经无法满足用户对于对图像分类灵活性和速度上的要求 甚至在复杂环境下 传统算法
  • Mac下安装Metasploit

    今天鼓捣Metasploit在Mac上的安装 首先下载pkg文件 http osx metasploit com metasploitframework latest pkg 接着 cd opt metasploit framework b
  • picker多列可选

    npm install usui save import usui from usui Vue use usui this usui picker label 1 value 1 label 2 value 2 label 3 value
  • androidstudio 导入git问题 is under Git, but is not registered in the Settings

    从git项目第一次导入数据到本地可能会出现以上问题 1 针对此图 首先选择Configure 2 针对上图选择加号 然后选择指定的项目路径以及类型 点击OK apply
  • Java案例:实现杨辉三角

    Java案例 实现杨辉三角 前言 本篇文章我将讲述使用Java实现杨辉三角的实现 而且可以根据用户输入的正整数输出指定行数的杨辉三角 一 杨辉三角是什么 杨辉三角 是二项式系数在三角形中的一种几何排列 中国南宋数学家杨辉1261年所著的 详
  • dockerfile

    当我在dockerfile里面想安装torchvision WORKDIR vision 0 8 1 WORKDIR相当于cd 进入文件夹执行 RUN python3 setup py install user 想要安装时 报错 Trace
  • LayUi 折叠表格

    表格会以代码的形式写到里面 大家可以将代码copy到项目中新建一个HTML尝试 下面用到的JS都会进行展示JS的内容 可以完全还原我当时的环境 lt include common layout html gt lt header gt
  • jQuery中的.bind()、.live()和.delegate()之间区别分析

    DOM树 首先 可视化一个HMTL文档的DOM树是很有帮助的 一个简单的HTML页面看起来就像是这个样子 事件冒泡 又称事件传播 当我们点击一个链接时 其触发了链接元素的单击事件 该事件则引发任何我们已绑定到该元素的单击事件上的函数的执行
  • 机器学习-KNN近邻算法

    参看文章 机器学习 周志华 机器学习实战 Peter Harrington 统计学习方法 李航 算法介绍 k近邻学习是一种常用的监督学习方法 其工作机制如下 给定测试样本 基于某种距离度量 曼哈顿距离 欧氏距离 切比雪夫距离 Lp距离 Mi
  • thinking 程序员思维习惯 .

    程序员 天职 gt 用计算机解决复杂 重复性 精确性问题 创造性 gt 养成一遇到问题 麻烦 应通过google相关的答案或 工具来解决 或写程序来解决的方法的思维习惯 case 导数程序 多库之间的同步 gt add UI 技术人员使用
  • 软件安全性测试

    软件安全性是一个广泛而复杂的主题 每一个新的软件总可能有完全不符合所有已知模式的新型安全性缺陷出现 要避免因安全性缺陷问题受各种可能类型的攻击是不切实际的 在软件安全测试时 运用一组好的原则来避免不安全的软件上市 避免不安全软件受攻击 就显
  • 如何在pycharm上安装tensorflow

    TensorFlow 是一个基于数据流编程 dataflow programming 的符号数学系统 被广泛应用于各类机器学习 machine learning 算法的编程实现 其前身是谷歌的神经网络算法库DistBelief Tensor
  • CMake命令之add_custom_comand 和 add_custom_target

    一 背景 在很多时候 需要在cmake中创建一些目标 如clean copy等等 这就需要通add custom target来指定 而add custom command则可以用来完成对add custom target生成的target
  • 一个变量越界导致破坏堆栈的bug

    前一段时间在商用系统上出现了core dump 原因是由于一个局部变量写越界导致堆栈被破坏了 在这里 我把这个bug分享一下 希望给需要的朋友一点帮助 简化的代码如下 typedef struct A void func1 char p v