图书介绍

安全编码标准 开发安全、可靠、稳固系统的98条规则 原书第2版PDF|Epub|txt|kindle电子书版本网盘下载

安全编码标准 开发安全、可靠、稳固系统的98条规则 原书第2版
  • (美)罗伯特C.西科德(ROBERTC.SEACORD)著;姚军等译 著
  • 出版社: 北京:机械工业出版社
  • ISBN:9787111509820
  • 出版时间:2015
  • 标注页数:394页
  • 文件大小:113MB
  • 文件页数:427页
  • 主题词:C语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

安全编码标准 开发安全、可靠、稳固系统的98条规则 原书第2版PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 预处理器(PRE)1

1.1 PRE30-C.不要通过连接创建通用字符名称1

1.2 PRE31-C.避免不安全宏参数的副作用3

1.3 PRE32-C.不要在类函数的宏调用中使用预处理器指令7

第2章 声明和初始化(DCL)9

2.1 DCL30-C.声明具有正确存储持续期的对象10

2.2 DCL31-C.在使用前声明标识符13

2.3 DCL36-C.不要声明具有冲突链接类别的标识符16

2.4 DCL37-C.不要声明或者定义保留标识符18

2.5 DCL38-C.使用正确语法声明灵活数组成员23

2.6 DCL39-C.避免在结构填充中泄露信息26

2.7 DCL40-C.不要创建相同函数或者对象的不兼容声明30

2.8 DCL41-C.不要在switch语句第一个条件标签之前声明变量35

第3章 表达式(EXP)37

3.1 EXP30-C.不要依赖求值顺序以避免副作用38

3.2 EXP32-C.不要通过非易失性引用访问易失性对象42

3.3 EXP33-C.不要读取未初始化的内存44

3.4 EXP34-C.不要对null指针进行解引用52

3.5 EXP35-C.不要修改具有临时生命期的对象56

3.6 EXP36-C.不要将指针转换为更严格对齐的指针类型59

3.7 EXP37-C.用正确数量和类型的参数调用函数62

3.8 EXP39-C.不要通过不兼容类型的指针访问变量67

3.9 EXP40-C.不要修改常量对象72

3.10 EXP42-C.不要比较填充数据73

3.11 EXP43-C.使用restrict限定的指针时避免未定义行为75

3.12 EXP44-C.不要向sizeof、_Alignof或者_Generic传递有副作用的操作数82

3.13 EXP45-C.不要在选择语句中执行赋值85

第4章 整数(INT)89

4.1 INT30-C.确保无符号整数运算不产生回绕90

4.2 INT31-C.确保整数转换不会造成数据丢失或者错误解释95

4.3 INT32-C.确保有符号整数的运算不造成溢出101

4.4 INT33-C.确保除法和余数运算不会造成0除数错误109

4.5 INT34-C.不要用负数或者不小于操作数位数的位数对表达式进行移位111

4.6 INT35-C.使用正确的整数精度115

4.7 INT36-C.将指针转换为整数或者将整数转换为指针117

第5章 浮点数(FLP)122

5.1 FLP30-C.不要使用浮点变量作为循环计数器122

5.2 FLP32-C.避免或者检测数学函数中的定义域和值域错误124

5.3 FLP34-C.确保浮点数转换在新类型的范围内132

5.4 FLP36-C.将整数值转换为浮点指针类型时保持精度135

第6章 数组(ARR)137

6.1 ARR30-C.不要形成或者使用超限的指针或者数组下标137

6.2 ARR32-C.确保变长数组的大小参数在有效范围内146

6.3 ARR36-C.不要进行两个不引用相同数组的指针之间的减法或者比较148

6.4 ARR37-C.不要在指向非数组对象的指针上加或者减一个整数149

6.5 ARR38-C.保证库函数不形成无效指针152

6.6 ARR39-C.不要在指针上加或者减一个按比例调整的整数159

第7章 字符和字符串(STR)163

7.1 STR30-C.不要企图修改字符串字面量163

7.2 STR31-C.保证字符串存储有足够的空间容纳字符数据和null结束符166

7.3 STR32-C.不要向要求字符串参数的库函数传递非null结束字符序列177

7.4 STR34-C.在转换为更大的整数尺寸之前将字符转换为unsigned char类型181

7.5 STR37-C.字符串处理函数的实参必须可以表示为unsigned char184

7.6 STR38-C.不要混淆窄和宽字符串及函数186

第8章 内存管理(MEM)189

8.1 MEM30-C.不要访问已释放内存189

8.2 MEM31-C.在不再需要时释放动态分配的内存194

8.3 MEM33-C.动态分配和复制包含灵活数组成员的结构196

8.4 MEM34-C.只释放动态分配的内存200

8.5 MEM35-C.为对象分配足够的内存203

8.6 MEM36-C.不要通过调用realloc()修改对象的对齐方式206

第9章 输入/输出(FIO)209

9.1 FIO30-C.从格式字符串中排除用户输入210

9.2 FIO31-C.不要打开已经打开的文件213

9.3 FIO32-C.不要在只适合文件的设备上执行操作216

9.4 FIO34-C.区分从文件读入的字符和EOF/WEOF221

9.5 FIO37-C.不要假定fgets()或者fgetws()在成功时返回非空字符串225

9.6 FIO38-C.不要复制FILE对象227

9.7 FIO39-C.不要在没有中间刷新或者定位调用的情况下在一个流中交替输入和输出228

9.8 FIO40-C.在fgets()或者fgetws()失败时重置字符串230

9.9 FIO41-C.不要用有副作用的流作为实参调用getc()、 putc()、 getwc()或者putwc()231

9.10 FIO42-C.在不再需要时关闭文件234

9.11 FIO44-C.对fsetpos()只使用fgetpos()返回的值237

9.12 FIO45-C.避免访问文件时出现TOCTOU竞争条件239

9.13 FIO46-C.不要访问已关闭文件242

9.14 FIO47-C.使用有效格式字符串243

第10章 环境(ENV)247

10.1 ENV30-C.不要修改某些函数返回值引用的对象247

10.2 ENV31-C.在可能使某个环境指针无效的操作之后不要依赖该指针252

10.3 ENV32-C.所有退出处理程序必须正常返回255

10.4 ENV33-C.不要调用system()258

10.5 ENV34-C.不要保存某些函数返回的指针264

第11章 信号(SIG)270

11.1 SIG30-C.在信号处理程序中只调用异步安全函数270

11.2 SIG31-C.不在信号处理程序中访问共享对象277

11.3 SIG34-C.不在可中断的信号处理程序中调用signal()280

11.4 SIG35-C.不从计算性异常信号处理程序中返回283

第12章 错误处理(ERR)286

12.1 ERR30-C.在调用已知设置errno的库函数之前,将errno设置为0,只在函数返回表示故障的值之后才检查errno286

12.2 ERR32-C.不要依赖不确定的errno值292

12.3 ERR33-C.检测并处理标准库错误295

第13章 并发性(CON)308

13.1 CON30-C.清理线程特定存储309

13.2 CON31-C.不要在互斥体被锁定时删除它们312

13.3 CON32-C.从多个线程访问位域时避免数据竞争315

13.4 CON33-C.使用库函数时避免竞争条件318

13.5 CON34-C.用正确的存储持续期声明线程间共享的对象320

13.6 CON35-C.以预定义顺序加锁,避免死锁327

13.7 CON36-C.将可能不合逻辑地唤醒的函数包装在一个循环中331

13.8 CON37-C.不要在多线程程序中调用signal()334

13.9 CON38-C.使用条件变量时保持线程安全性和活性336

13.10 CON39-C.不要加入或者断开之前已经加入或者断开的线程343

13.11 CON40-C.不要在一个表达式中两次引用同一个原子变量344

13.12 CON41-C.将可能不合逻辑地失败的函数包装在一个循环中348

第14章 杂项(MSC)351

14.1 MSC30-C.不要使用rand()函数生成伪随机数352

14.2 MSC32-C.正确地设置伪随机数生成器的种子354

14.3 MSC33-C.不要向asctime()函数传递无效的数据357

14.4 MSC37-C.确保控制永远不会到达非void函数的结束位置359

14.5 MSC38-C.如果预定义标识符只能以宏的形式实现,不要将其当作对象处理362

14.6 MSC39-C.不要在va_list的值不确定时调用va_arg()363

14.7 MSC40-C.不要违反约束365

附录A 词汇表370

附录B 未定义行为375

附录C 未指定行为384

参考文献387

热门推荐