01
内存安全导论
什么是内存安全 · 为什么重要 · 常见安全问题概览 · 课程目标与路径
缓冲区溢出空指针UAF
02
计算机内存基础
内存分层 · 虚拟/物理内存 · 进程地址空间 · 内存对齐
寄存器堆栈缓存
03
指针的本质
指针声明 · 算术运算 · 数组与指针 · 多级指针 · 函数指针
地址解引用类型
04
指针的常见陷阱
野指针 · 悬空指针 · 越界访问 · 类型不匹配 · 未初始化
段错误漏洞
05
缓冲区溢出原理
栈/堆/全局溢出 · 触发机制 · 经典案例分析
ShellcodeROP
06
栈缓冲区溢出
栈帧 · 返回地址覆盖 · ROP链 · Canary/ASLR/NX
保护机制栈迁移
07
堆内存管理
malloc/free · chunk结构 · 空闲链表 · 分配策略
glibcptmalloc
08
堆缓冲区溢出
堆溢出原理 · 关键指针篡改 · 堆喷射 · 保护机制
堆块覆盖Safe-Link
09
释放后使用 (UAF)
UAF原理 · 悬挂指针 · 堆块重用 · 利用与防御
悬挂指针重用
10
双重释放 (Double Free)
双重释放原理 · fastbin/tcache攻击 · 检测方法
fastbintcache
11
空指针解引用
空指针原理 · 内核空指针漏洞 · 防御方法
NULL崩溃
12
整数溢出与内存安全
整数溢出原理 · 导致缓冲区溢出 · 符号/截断错误
回绕安全整数
13
格式化字符串漏洞
%n写入 · 内存读取 · 任意地址写入 · 防御
printf任意写
14
类型混淆 (Type Confusion)
对象类型混淆 · C++虚表劫持 · 利用与检查
虚函数vtable
15
竞争条件与内存安全
数据竞争 · TOCTOU · 信号处理 · 锁与原子操作
竞态原子
16
内存泄漏
堆泄漏 · 资源泄漏 · Valgrind/ASan · RAII与智能指针
泄漏智能指针
17
C语言内存安全实践
安全字符串 · 边界检查 · 数组索引 · 指针规范
strncpysnprintf
18
C++内存安全实践
unique_ptr/shared_ptr/weak_ptr · RAII · 异常安全
智能指针RAII
19
Rust内存安全模型
所有权 · 借用 · 生命周期 · 消除数据竞争 · unsafe
借用检查零成本
20
内存安全工具链
ASan · MSan · UBSan · Valgrind · 静态分析
Sanitizer动态
21
静态分析技术
数据流/控制流分析 · 符号执行 · Clang Static Analyzer
Coverity抽象解释
22
动态分析技术
Fuzzing · AFL · LibFuzzer · Sanitizer集成
覆盖率变异
23
操作系统内存保护
页表 · MMU/TLB · 段保护 · SELinux · MPK
权限隔离
24
编译器安全机制
Canary · ASLR · PIE · RELRO · FORTIFY · CFI
编译选项缓解
25
硬件安全特性
NX · SMEP/SMAP · Intel CET · ARM MTE · CHERI
CPU标记
26
Web安全中的内存问题
JS引擎 · 浏览器沙箱 · WebAssembly · Node.js
V8沙箱
27
内核内存安全
内核堆/栈溢出 · UAF · 缓解措施
KASLR内核
28
物联网与嵌入式内存安全
RTOS · 固件安全 · 嵌入式指针 · IoT漏洞
资源受限MCU
29
安全编码规范与标准
CERT C · MISRA C · SEI CERT C++ · OWASP
规范最佳实践
30
课程总结与未来展望
技术演进 · 形式化验证 · 内存安全语言 · 项目实践
趋势持续学习