关于buffer overflow detected 程序崩溃的思考

2023-05-16

我是在使用别人源码(DBT2 benchmark)的时候,编译成功然后运行就出现了这个问题。本以为像这种开源的软件应该没什么太明显的bug,但是后来细想,buffer overflow暗示着指针操作内存不当导致程序崩溃。。。遇到问题后,首先百度了一下,很多篇博客也提到了相同的问题,解决方案几乎都是针对什么ubuntu gcc版本,查看一下自己的gcc版本是4.4而且yum源最新,就觉得这个解决方法不靠谱至少在我的环境中不适用。于是乎又转战到google和stackoverflow寻找答案,http://stackoverflow.com/questions/14172409/buffer-overflow-detected-in-a-program-that-runs-flawlessly-apparently 这里给我了启发,他是在做字符串操作的时候出现的这个问题,让我想到了我用的这个程序应该也是出现了指针错误、内存越界之类的问题。幸运的是DBT2 benchmark是手动编译源码的,所以有src。最后的解决方案就是看源码调试源程序。

src/

client.c
db_threadpool.c
db.c
mysql/dbc_common.c
include/mysql_common.h

程序编译完以后是执行client,所以以client为入口调试程序。由于对源程序不了解,所以直接看源码顺便打上一些输出作为调试信息。

依赖关系为:client.c -> db_threadpool.c -> db.c -> mysql/dbc_common.c......,由于程序中本身就有一些输出,崩溃时观察到db_threadpool.c中的printf点有输出正确地信息,后续就没有输出了,dbc_common.c中的LOG_ERROR_MESSAGE也没有输出,同时在这里也发现了大量的strcpy,它把传入进来的字符串参数值全部strcpy拷贝到mysql_开头的全局变量中,于是在每个strcpy后面都添加printf输出当前字符串。重新编译运行,终于发现了终止的地方,mysql_host这个字符串变量的值没输出。再次打开dbc_common.c才恍然大悟,该文件中定义的几个mysql_全局char数组,都是定长的,比如32个字节,万一我们传入的参数大于31个字符,strcpy必然会出问题,检查参数发现,mysql_host字符串长度不止31,所以这里导致了overflow的bug。我把全局变量mysql_host的长度改成了1024 ,重新编译运行,又报出了定义冲突的问题,原来是在include/mysql_common.h中声明了externt char mysql_host[32],这里也需要改成一样的。最后这个bug便修复了。

返回来重新审视这个bug,仅仅是因为定义一个字符数组时分配的空间不足以容纳字符串,导致了buffer overflow detected的错误,所以我们在程序中对于内存空间的分配一定要掌握好,要么分配足够大的定长空间,要么就malloc动态开辟。他这里单纯地以为作为一个host用IP地址表示的话十几、二十个字符长度就够了,然而却没想到AWS的实例使用了非常长的域名,无法容纳导致程序终止,也是万万没想到会在这和小问题上栽跟头。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于buffer overflow detected 程序崩溃的思考 的相关文章

  • Keil调试局部变量显示"not in scope"的问题解决

    今天在调试程序的时候 xff0c 发现函数返回值赋值给变量时 xff0c 变量值总是显示 34 not in scope 34 xff0c 无法看到变量被赋的值 出现这种情况的原因是这个局部变量没被分配到内存 xff0c 或者变量被编译器优
  • STM32串口中断的方式发送

    我将其改为真正的中断发送 步骤一 xff1a 初始化GPIO GPIO InitTypeDef GPIO InitStructure GPIO InitStructure GPIO Pin 61 GPIO Pin 10 LED1 PC10
  • 可综合的异步fifo设计(一)

    异步FIFO设计 一 基本概念二 设计思路2 1 设计前准备工作2 1 1 系统框图2 1 2 格雷码基础2 1 3 异步fifo工作流程举例2 1 4 异步fifo空满标志产生的算法设计 2 2 RTL建模2 2 1 DPRAM建模2 2
  • Unity学习(六):Unity中的实例化炮弹并设置速度

    1 static function Instantiate original Object position Vector3 rotation Quaternion Object 可用于prefab的拷贝 Instantiates 10 c
  • Unity学习(十一): Unity中的NetWork使用

    先说一下一些基本概念吧 xff01 复习复习 NAT 穿透技术 NAT 即Network Address Translation xff0c 可译为网络地址转换或网络地址翻译 网络地址转换 NAT Network Address Trans
  • ubuntu提示opengl版本过低-Gallium0.4 on llvmpipe(llvm 3.8 128bits)

    在ubuntu14 04下写GLSL xff0c 需要GLSL 4 0 以上的支持 xff0c 但是编译运行的时候 xff0c 提示我opengl和glsl版本过低 xff0c 只支持1 3 我xx xff0c 我用的卡是Geforce G
  • C#中的继承规则

    1 继承可传递 C从B派生 B从A派生 xff0c 则C不仅继承了B中的成员 xff0c 同时也获得了A中的成员 Object类为所有类的基类 2 派生类是对基类的扩展 xff0c 可以添加新成员 xff0c 但不能除去已经继承的成员的定义
  • 安卓自定义View文章数据滚动显示数值

    本文已经在微信公众号 Android群英传 发表 未经允许不得转载 转载请注明作者AndroidMsky及原文链接 http blog csdn net androidmsky article details 53009886 本文Gith
  • 场景管理方法之BVH介绍

    总结一下最近学习BVH的知识 BVH全称 xff1a Bounding volume hierarchy 这是一种用来管理3D场景中物体的方法 我主要是在光线追踪算法中用这个方法来做加速 xff0c 因为光线追踪算法的计算要求非常高 xff
  • C++ :error LINK2005:函数XXX已经在main.obj中定义--解决方法

    我的情况是这样的 xff1a 我在头文件中定义了一个函数 xff0c 然后这个函数被其他函数引用 但是编译的时候死活通不过 xff0c 一直报错 xff1a error LINK2005 xff0c 费了好大力气 才解决 include 3
  • unity解决快速运动物体碰撞检测穿透问题

    在Unity中 xff0c 快速移动的物体在与其他物体进行碰撞检测时 xff0c 可能会穿透 比如子弹和墙壁的碰撞检测 如何解决这个问题呢 xff1f 网上看了下 xff0c 有说Rigidbody修改continus的 xff0c 但是我
  • leetcode33题解_Search in Rotated Sorted Array

    题意 xff1a 要在一个排好序的但是旋转过的序列中找给定的数字 xff08 通常的题目是 xff0c 比如 xff1a 1 xff0c 2 xff0c 3 xff0c 4 xff0c 5 xff0c 6 xff0c 7 找这组序列中是否有
  • 回溯算法的理解与使用

    最近在做题的过程中发现很多我不会的题目的解决方法都使用了回溯算法的思想 xff0c 说明我对这个算法目前掌握的还不够牢固 xff0c 因此今天花时间来好好了解这个算法 回溯算法是一种算法思想 xff0c 而递归则是具体的代码结构 就我的学习
  • Kmeans基本思想以及和SVM的区别

    由于最近要用到该算法 xff0c 但是发现算法的思想基本忘掉了 xff0c 只知道是聚类算法 xff0c 因此又回头去学习了一番 xff0c 记录下学习的感受 xff0c 方便以后复习 Kmeans算法的基本思想 xff1a 看如下图 xf
  • HTTPConnection与JSON应用实例

    JSON xff1a 一种轻量级的数据交换格式 JSONObject xff1a 一个json对象 包含一对儿 Key Value 数值 xff0c 在Key和Value之间是以逗号 分隔 JSONStringer xff1a json文本
  • VS(Visual Studio)与VC(Visual C++)对应关系

    opencv 2 4 10 gt vc10 vc11 vc12 opencv 2 4 13 gt vc11 vc12 opencv 3 4 0 gt vc14 vc15 opencv 3 4 1 gt vc14 vc15 Visual St
  • 如何在win10下用Anaconda安装gym(强化学习)

    默认已经安装好Anaconda和pycharm 配置libssl 1 1 x64 ddl libcrypto 1 1 x64 dll 把路径 Anaconda3 Library bin 下面的文件复制到路径 Anaconda3 DLLs 下
  • win10系统下TwinCAT3与VS2019之间的ADS通信

    64 WIN10 TwinCAT3 VS2019 ADS 转博后第一次出差 xff0c 来到了UnitedImaging xff0c 这次的任务是负责在ros系统和TwinCAT3之间的 ADS 通信 作为本次第一篇博客 xff0c 先跑通
  • 两步实现安卓手机秒变网络摄像头

    今天大概是兴趣加技术篇 xff0c 程序员不写点有趣的代码 xff0c 怕是很难在女票和家人面前秀出科技感 GITHUB xff1a https github com AndroidMsky RootPlay 如GIF所示 xff0c 自动
  • TwinCAT3与ROS之间的ADS通信实现

    TwinCAT3与ROS之间的ADS通信实现方法 摘要 xff1a TwinCAT xff08 The Windows Control and Automation Technology xff0c 基于Windows的控制和自动化技术 x

随机推荐

  • 基于DDPG、TD3的UR5装配仿真及其对比

    本项目为上海交通大学2020年度秋季学期 xff0c 乐心怡老师讲授的 最优控制 课程的大作业 xff0c 大部分内容基于方晓猛学长的工作 基于神经网络算法的多机械臂协同控制技术研究 xff0c 最近因为开题所以重新温习了一下强化学习 xf
  • Bullet 布料仿真的底层算法分析

    Bullet 可变物体的底层算法分析 1 计算机图形学中可变建模方法1 1 质点 弹簧模型 xff08 离散 xff09 1 2 有限元连续体模型 xff08 连续 xff09 2 布料模拟的两种主要算法2 1 隐式时间积分2 2 基于位置
  • 【文献阅读】Position Based Dynamics

    文献阅读 Position Based Dynamics 摘要3 Position Based Simulation3 1 算法3 2 求解器3 3 约束投影3 4 碰撞检测和回应3 5 阻尼3 6 接触 4 布料仿真4 1 布料的表示4
  • 完成一篇机器人领域期刊论文所需要的一些工具

    完成一篇机器人领域期刊论文所需要的一些工具 书写工具制图工具PDF格式PPT制图VISIO制图 EPS 格式Inkspace 仿真工具MATLAB路径点生成实时仿真动画Gif生成 ROS 仿真Rviz仿真 剪辑工具录屏软件 Obs Stud
  • NSData转为Int

    在Socket传输中 收到的数据一般都是NSData型 但是我们要对数据进行分析 分解出长度等信息 然后转为Int型 这里就需要转换 swift代码如下 var len Int data getBytes amp len length si
  • 常用的RTMP、RTSP、HTTP协议流直播流地址

    一 RTMP RTSP HTTP协议 这三个协议都属于互联网 TCP IP 五层体系结构中应用层的协议 理论上这三种都可以用来做视频直播或点播 但通常来说 xff0c 直播一般用 RTMP RTSP 而点播用 HTTP 下面分别介绍下三者的
  • 不同工程同一套代码(基础组件SDK一样)的使用

    说明 xff1a 当使用公司的代码要适应不同的地域的需求 xff0c 需要在基础组件的基础上开发不同的App即不同的工程 xff08 请看下图 xff09 xff0c 当两个工程用到同一套代码如何做到互不影响 xff0c 请看下文代码 1
  • 字节序、比特序(一)

    1 字节序 字节序即字节的存储顺序 xff0c 如果数据都是单字节的 xff0c 那怎么存储无所谓了 xff0c 但是对于多字节数据 xff0c 比如int xff0c double等 xff0c 就要考虑存储的顺序了 字节序是硬件层面的东
  • win10下,VsCode搭建golang运行环境,并能断点调试

    第一步 xff0c 下载 基础包 vscode git go xff0c 我用的都是64位 1 vscode https code visualstudio com Download 2 git https git scm com down
  • 揭秘之从RecyclerView滑动监听到Gilde平滑加载图片

    未经允许不得转载 转载请注明作者AndroidMsky及原文链接 http blog csdn net androidmsky article details 53115818 本文应该是RecyclerView的第三篇 xff0c 今天来
  • Unity 动画状态机 设置Trigger后,有时触发动画有时触发不了的问题

    如果想立即触发下一个动画 xff0c 必须把 has exit time 去掉 否则会有时能触发 xff0c 有时触发不了
  • [海康威视]-超脑设备告警布防代码C#实现

    这是海康威视的超脑设备的 告警布防 程序 xff0c 可以控制 接收超脑的识别到的熟人和陌生人的告警信息 通过超脑里面的人脸数据和摄像机抓拍到的人进行比对 xff0c 如果是人脸库的的人就返回 给你告警布防程序信息 xff0c 包括姓名 x
  • [海康威视]-门禁设备告警布防代码C#实现

    这是海康威视的门禁的 告警布防 程序 xff0c 人脸识别 xff0c 身份证识别 xff0c 可以控制 门禁的开关 可以接收门禁刷身份证的相关身份证信息 识图拿代码
  • centOS 7安装 teamviewer 再启动系统就登录不了系统了

    centOS7 安装了teamviewer 12 0 93330 i686 rpm 和teamviewer 13 0 9865 i686 rpm 都出现了同类情况 安装能成功 xff0c 安装命令直接 用的 yum install 安装后
  • Unity 按钮的按下处理事件之自定义处理函数

    例如 qq登陆按钮 首先准备好按钮 xff0c 然后按照下面的步骤 xff1a 1 给按钮添加脚本文件login btn qq cs 其实我已经添加好了 只是演示在哪里添加 2 打开 login btn qq cs 文件 xff0c 添加
  • vs2017安卓开发的问题:模拟器报错 Decryption unsuccessful

    按照微软官方文档还算顺利 直到 这里 Docs Xamarin Xamarin Android 开始操作 了解 Android 第 1 部分 xff1a 快速入门 这里zhi 39 直到写完代码也很顺利 但是调用模拟器时报错了 原因是 xf
  • 《视觉SLAM十四讲》 编译报错问题汇总 Ubuntu20.04

    Ubuntu 20虚拟机环境安装 高翔原视频是ubuntu14 04 xff0c 看了一下 xff0c 有很多库都有兼容问题 xff0c 所以初步按这个Ubuntu 20装 xff1a 这个教程是ubuntu20的 用ubuntu14会不兼
  • C语言结构体(struct)常见使用方法

    目录 结构体声明与定义 结构体变量及其内部成员变量的定义及访问 引用 xff08 C 43 43 xff09 指针和数组 结构体嵌套 结构体与函数传参 占用内存空间 变长结构体 基本定义 xff1a 结构体 xff0c 通俗讲就像是打包封装
  • 如何禁止STL map 自动排序

    最近在做一个SPC SQC 的项目 其中有一处用到了stl map 得到了一个小小的心得 xff0c 分享给大家 我们知道 xff0c 在向map中插入数据对时候 xff0c map中的元素将按照一定的顺序被插入到对应的节点上 xff0c
  • 关于buffer overflow detected 程序崩溃的思考

    我是在使用别人源码 xff08 DBT2 benchmark xff09 的时候 xff0c 编译成功然后运行就出现了这个问题 本以为像这种开源的软件应该没什么太明显的bug xff0c 但是后来细想 xff0c buffer overfl