什么是内存踩踏及其危害

先来看一个例子:

c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
        char *p,*q;
        p = malloc(16);
        q = malloc(16);
        strcpy(p,"hello world! hello zhaixue.cc!\n");
        strcpy(q,"88888888888\n");
        printf("*p = %s\n",p);
        printf("*q = %s\n",q);
        while(1);
        free(q);
        free(p);
        return 0;
}

运行结果:

c 复制代码
myc % gcc t.c -o t
myc % ./t         
*p = hello world! hel88888888888

*q = 88888888888

这里就是典型的内存踩踏。

不写C程序的话,很少听过内存踩踏这一说。"内存踩踏"(Memory Trampling)是编程中一种严重的内存非法操作问题,本质是程序错误地覆盖了不属于自己的内存区域,导致数据被篡改、程序崩溃,甚至引发安全漏洞。它是比普通内存越界更宽泛的说法,涵盖多种内存非法写入 / 修改行为,常见于 C/C++ 等无内存安全检查的语言。

内存踩踏的本质是访问了超出程序合法权限的内存地址,并对其进行写入操作,常见场景包括:

  • 数组越界写入
  • 指针越界 / 野指针写入:指针超出范围写入
  • 栈溢出 / 栈踩踏:局部数组过大、递归过深,或函数调用时栈帧覆盖(如缓冲区溢出)
  • 内存重叠操作:memcpy(dst, src, 100); 中 dst 和 src 内存区域重叠,导致数据覆盖
  • 多线程竞态写入:多个线程无同步地写入同一块内存,互相覆盖数据(逻辑层面的 "踩踏")
  • 释放后使用(UAF):free§; *p = 0;(释放的内存被复用后,写入操作篡改新数据)

内存踩踏的危害:

  • 程序崩溃:覆盖关键内存(如函数返回地址、栈帧指针)会直接导致段错误(Segmentation Fault)、总线错误;
  • 隐性 bug:覆盖非关键内存时,程序可能继续运行,但数据被篡改(如变量值莫名变化、计算结果错误),偶发崩溃且难以复现;
  • 安全漏洞:恶意利用内存踩踏(如缓冲区溢出)可篡改程序执行流程,注入恶意代码(经典的栈溢出攻击);
  • 调试困难:踩踏行为发生的位置,往往和程序崩溃 / 异常的位置不重合("写坏内存" 和 "发现错误" 有时间差),定位成本高。
相关推荐
Tingjct3 小时前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
飞机和胖和黄4 小时前
考研之王道C语言第三周
c语言·数据结构·考研
醉颜凉4 小时前
【LeetCode】打家劫舍III
c语言·算法·leetcode·树 深度优先搜索·动态规划 二叉树
一匹电信狗4 小时前
【LeetCode_21】合并两个有序链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
卢锡荣8 小时前
Type-c OTG数据与充电如何进行交互使用应用讲解
c语言·开发语言·计算机外设·电脑·音视频
v_for_van8 小时前
力扣刷题记录2(无算法背景,纯C语言)
c语言·算法·leetcode
二年级程序员8 小时前
动态内存管理
c语言
我能坚持多久8 小时前
D20—C语言文件操作详解:从基础到高级应用
c语言·开发语言
(❁´◡`❁)Jimmy(❁´◡`❁)9 小时前
CF2188 C. Restricted Sorting
c语言·开发语言·算法
想放学的刺客9 小时前
单片机嵌入式试题(第27期)设计可移植、可配置的外设驱动框架的关键要点
c语言·stm32·单片机·嵌入式硬件·物联网