莆田人做的网站孝感网站开发的公司电话

张小明 2026/1/12 10:41:42
莆田人做的网站,孝感网站开发的公司电话,带着做计算机项目的网站,广东住房和城乡建设厅网站分享一个最近遇到的栈溢出的经典例子。 1. 问题现象 某个状态码从正常的 0x01 突然变了。 核心代码简化后如下#xff1a; 两次打印之间只调用了 read_data()#xff0c;没有任何代码修改 status#xff0c;但它就是变了。某个情况下read_data读到了24个字节的数据#xff…分享一个最近遇到的栈溢出的经典例子。1. 问题现象某个状态码从正常的0x01突然变了。核心代码简化后如下两次打印之间只调用了read_data()没有任何代码修改status但它就是变了。某个情况下read_data读到了24个字节的数据但是缓冲区只给了16个字节溢出了溢出的字节覆盖了status。这种栈溢出篡改数据的问题在定位到的时候觉得很简单。但是实际这种情况并且是偶现问题而且代码不像是上面这个简化代码这么简单问题代码藏在一堆代码之间排查起来还是挺费时间的。2. 原因分析为了理解为何status会被改我们需要看清函数栈帧的内存布局栈向下增长局部变量按声明顺序从高地址向低地址分配。strcpy写入24字节到16字节的buffer时多出的8字节会向上溢出覆盖相邻的内存区域。注意同一函数内局部变量的布局由编译器决定不一定按声明顺序。即首先声明的变量不一定是存放在高地址。栈的生长方向不能改变这是由 CPU 架构决定。测试代码运行结果status的地址0x7ffc8b2a3c4f正好在buffer地址0x7ffc8b2a3c40之后15字节处0x40 0x0f 0x4f。解决方案用安全版本的字符串函数。2.1 为什么栈会溢出C语言的strcpy、sprintf等函数不做边界检查。当源数据大于目标缓冲区时多余数据会继续写入相邻内存。栈上相邻的可能是其他局部变量本案例函数返回地址更危险会导致程序崩溃或被利用栈帧指针EBP/RBP2.2 编译器选项增强检测现代编译器GCC 7有栈保护机制Stack Canary但默认只保护返回地址不保护局部变量之间的溢出。可以通过编译选项增强检测# 栈保护检测返回地址破坏gcc -fstack-protector-all -otesttest.c# AddressSanitizer检测所有内存越界gcc -fsanitizeaddress -g -otesttest.c使用 AddressSanitizer 重新编译运行立即得到精确报错12345ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffc8b2a3c50WRITE of size 24 at 0x7ffc8b2a3c40 thread T0#0 0x... in strcpy#1 0x... in read_data test.c:6#2 0x... in data_process test.c:153. 栈溢出预防措施3.1 代码规范禁止使用的危险函数危险函数安全替代原因strcpystrncpy/strlcpy无边界检查sprintfsnprintf无边界检查getsfgets无法限制长度scanf(%s)scanf(%Ns)无边界检查3.2 工具静态分析# Cppcheckcppcheck --enableall --error-exitcode1 src/# Clang Static Analyzerscan-build make动态检测测试环境默认开启# Valgrind内存检测valgrind --leak-checkfull ./test# AddressSanitizerASAN_OPTIONSdetect_stack_use_after_return1 ./test相关文章嵌入式开发调试利器 | Sanitizer检测器工具 | Valgrind仿真调试工具的使用推荐一个好用的嵌入式静态代码扫描工具总结永远不要相信输入数据的长度即使是可信的传感器数据。编译器不会完全保护你需要主动启用检测工具。栈溢出是最常见的内存错误但只要建立起缓冲区必须传大小的编码习惯90%的问题都可以避免。如果这篇文章对你有帮助欢迎转发。欢迎分享你的踩坑经历。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站开发交接协议书网站设计构想

Docker CLI构建系统完全指南:从源码到可执行文件的终极解析 【免费下载链接】cli The Docker CLI 项目地址: https://gitcode.com/gh_mirrors/cli5/cli 想要深入了解Docker CLI这个容器生态核心工具的构建过程吗?Docker CLI构建系统采用精心设计的…

张小明 2026/1/6 7:52:59 网站建设

做美容美发学校网站公司网站建站建设价格

第一章:Open-AutoGLM Linux 安装教程系统环境准备 在安装 Open-AutoGLM 之前,需确保 Linux 系统满足最低运行要求。推荐使用 Ubuntu 20.04 LTS 或更高版本,系统应具备 Python 3.9、pip 包管理工具及 Git。更新系统软件包索引:sudo…

张小明 2026/1/6 7:49:56 网站建设

如何建立自己的appseo流量的提升的软件浿

高效人脸融合新选择:FaceFusion镜像全面解析在短视频特效、虚拟主播和数字人日益普及的今天,如何快速实现高质量的人脸融合,成为开发者关注的核心问题。传统方案往往受限于复杂的环境配置、高昂的算力成本以及模型部署门槛,使得许…

张小明 2026/1/6 1:13:32 网站建设

网站开发数据库技术南宁做网站推广的公司哪家好

摘要 随着互联网技术的快速发展和人们生活水平的不断提高,文化娱乐消费需求日益增长,线上订票系统成为现代音乐厅、剧院等场所的重要服务工具。传统的线下购票方式存在效率低、信息不对称、排队耗时等问题,而线上订票系统能够有效解决这些痛点…

张小明 2026/1/6 2:10:33 网站建设

高端的扬中网站建设陕煤化建设集团网站矿建二公司

弹窗数据实时渲染:用layer让静态页面"活"起来 【免费下载链接】layer 项目地址: https://gitcode.com/gh_mirrors/lay/layer 还在为弹窗数据陈旧而困扰吗?当用户操作后,弹窗内容却无法同步更新,这种体验就像在看…

张小明 2026/1/6 1:33:11 网站建设

不写代码门户网站建设免费的招聘网站

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个工业机器人ROS部署案例,展示小鱼一键安装工具的实际应用。包含:1) 工业机器人硬件配置说明 2) ROS melodic/noetic版本选择指南 3) 工业常用功能包自…

张小明 2026/1/5 22:10:58 网站建设