做网站设计网站建设推广网站标题的重要性

张小明 2025/12/25 0:52:09
做网站设计网站建设推广,网站标题的重要性,网站产品详情页怎么做,西安演出公司网站建设分享一个最近遇到的栈溢出的经典例子。 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进行投诉反馈,一经查实,立即删除!

重庆万州网站建设公司电话专门做衣服特卖的网站有哪些

信捷XDH系列PLC追剪/飞剪/电子凸轮程序模板 包含了定长追剪和飞剪模式/定标飞剪/追剪模式 函数功能块无jia密,是学习信捷追/飞剪的经典模板 适合参考借鉴 包含:PLC程序信捷触摸屏HMI软元件分配表最近在搞PLC运动控制的朋友应该对信捷XDH系列不陌生&#…

张小明 2025/12/24 0:23:07 网站建设

我想建设网站做seo的网站是怎么样的

Go语言从1.18到1.25版本功能更新详解 从泛型革命到性能飞跃:全面解析Go语言7年来的核心功能演进 本文基于2025年12月11日最新信息,Go 1.25已于2025年8月正式发布 ⚠️ 重要提醒:Go泛型约束说明 在学习Go泛型之前,请务必理解以下约…

张小明 2025/12/24 0:23:05 网站建设

建设工程合同 网站用nodejs可以做网站么

影刀RPA实战:3分钟自动化Zozone退款,效率飙升300%!🚀 还在手动处理海量退款申请?每天重复复制粘贴、核对数据,浪费生命又容易出错?别急,今天我用影刀RPA带你搞定这个痛点&#xff0c…

张小明 2025/12/24 1:45:07 网站建设

网站设计模板域名防红跳转网址生成

9 个专科生论文降重网站,AI 工具推荐 论文写作的“痛”与“难”,你真的懂吗? 对于专科生来说,论文写作从来不是一件轻松的事。从选题到开题,从文献综述到撰写正文,每一个环节都充满了挑战。尤其是到了论文降…

张小明 2025/12/24 1:45:05 网站建设

建建建设网站公司网站安康 住房城乡建设部网站

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个快速原型工具,使用Chrome驱动实现网页自动化操作。功能包括:1. 自动填写表单并提交;2. 抓取页面特定内容;3. 支持自定义脚本…

张小明 2025/12/24 1:45:03 网站建设

什么是云速建站服务东营网官网

Windows 文件关联设置全解析 1. 注册表 HKCR 概述 在 Windows 系统中,注册表的大部分文件关联和类注册内容都存于 HKCR 中。这里存储着不同类型文件与可打开、编辑和打印它们的程序之间的关联设置,同时也对各类程序类进行注册,以便 Windows 能利用这些类创建对象。 日常对…

张小明 2025/12/24 1:45:01 网站建设