C语言防御式编程 · 健壮性设计

📚 共计 30 章节
01
防御式编程基础
什么是防御式编程、核心思想、与常规编程的区别、适用场景
思想入门
02
断言的艺术
assert宏、static_assert、断言与错误处理区别、生产策略
断言调试
03
参数校验
合法性检查、指针判空、数值范围、枚举有效性
校验安全
04
内存安全
malloc/calloc/realloc检查、泄漏检测、野指针、缓冲区溢出
内存核心
05
字符串安全
strcpy/strcat危险、strncpy正确使用、snprintf替代、安全函数
字符串CWE
06
数组与指针安全
越界检查、指针边界控制、柔性数组、类型转换安全
指针边界
07
整数安全
溢出检测、有符号/无符号陷阱、安全算术、size_t使用
整数算术
08
枚举与布尔安全
枚举范围检查、布尔正确使用、三态逻辑、返回值规范
枚举布尔
09
结构体安全
初始化、内存对齐、拷贝安全、位域注意事项
结构体内存
10
文件操作安全
打开失败处理、读写完整性、描述符泄漏、临时文件安全
文件IO
11
错误处理机制
errno使用、错误码规范、传播策略、集中式处理
错误errno
12
日志与调试
日志级别、格式规范、条件编译、性能影响
日志调试
13
状态机编程
设计模式、状态转换表、防御策略、测试
状态机设计
14
契约式设计
前置/后置条件、不变式、契约继承、测试
契约设计
15
异常控制流
setjmp/longjmp安全、信号处理、异步信号安全、中断防御
异常信号
16
多线程安全
互斥锁规范、条件变量、安全队列、死锁预防
线程并发
17
原子操作与内存序
原子类型、内存序模型、无锁编程基础、ABA问题
原子内存序
18
资源管理
RAII思想、资源获取即初始化、释放保证、泄漏检测
RAII资源
19
配置与常量管理
魔法数字消除、配置集中管理、编译期常量、运行时校验
配置常量
20
接口设计安全
API设计原则、最小权限、版本管理、向后兼容
接口API
21
代码复用安全
宏定义陷阱、内联函数安全、回调安全、函数指针类型安全
复用
22
编译期检查
编译器警告、静态分析、Coverity/Clang Static Analyzer、规范检查
静态分析编译
23
运行时检查
AddressSanitizer、UBSan、Valgrind、运行时边界检查
SanitizerValgrind
24
单元测试
测试框架、用例设计、边界值测试、Mock对象
测试单元
25
代码审查
审查清单、缺陷模式、审查流程、自动化工具
审查质量
26
安全编码标准
MISRA C、CERT C、SEI CERT规则、行业最佳实践
标准MISRA
27
嵌入式系统防御
资源受限、实时性、硬件抽象层安全、中断安全
嵌入式RTOS
28
网络编程安全
socket错误处理、数据序列化、协议解析防御、超时机制
网络socket
29
安全生命周期
需求/设计/编码/测试/维护阶段安全
生命周期SDL
30
综合案例实战
完整防御项目、策略设计、代码审查、持续集成防御检查
实战项目