第1章 二进制安全概述 1
1.1 汇编指令 1
1.1.1 寄存器 1
1.1.2 指令集 6
1.2 编译环境 8
1.2.1 x86环境 8
1.2.2 ARM环境 9
1.2.3 MIPS环境 11
1.3 常用工具 12
1.3.1 PE工具 12
1.3.2 OllyDbg工具 14
1.3.3 IDA Pro工具 15
1.4 本章小结 17
1.5 习题 18
第2章 基本数据类型 19
2.1 整数 19
2.1.1 无符号整数 19
2.1.2 有符号整数 21
2.2 浮点数 21
2.2.1 浮点指令 22
2.2.2 编码 22
2.3 字符和字符串 24
2.4 布尔型 27
2.5 指针 28
2.6 常量 30
2.7 案例 32
2.8 本章小结 33
2.9 习题 34
第3章 表达式 35
3.1 算术运算 35
3.1.1 四则运算 35
3.1.2 自增和自减 41
3.2 关系运算和逻辑运算 42
3.3 位运算 49
3.4 案例 52
3.5 本章小结 54
3.6 习题 54
第4章 流程控制 56
4.1 if语句 56
4.1.1 单分支 56
4.1.2 双分支 57
4.1.3 多分支 58
4.2 switch语句 60
4.3 while/for语句 66
4.3.1 while循环语句 66
4.3.2 for循环语句 68
4.4 案例 69
4.5 本章小结 72
4.6 习题 72
第5章 函数 74
5.1 函数栈 74
5.2 函数参数 75
5.3 函数调用类型 77
5.4 函数返回值 81
5.5 案例 82
5.6 本章小结 85
5.7 习题 85
第6章 变量 87
6.1 全局变量 87
6.2 静态变量 88
6.3 堆变量 90
6.4 案例 93
6.5 本章小结 96
6.6 习题 96
第7章 数组和指针 98
7.1 数组 98
7.1.1 数组作为参数 99
7.1.2 数组作为返回值 100
7.1.3 多维数组 101
7.2 指针 102
7.2.1 指针数组 102
7.2.2 数组指针 106
7.2.3 函数指针 108
7.3 案例 109
7.4 本章小结 112
7.5 习题 112
第8章 结构体 114
8.1 结构体变量内存分配 114
8.2 结构体对象作为函数参数 120
8.2.1 值传递 120
8.2.2 地址传递 122
8.3 结构体对象作为函数返回值 124
8.4 案例 125
8.5 本章小结 127
8.6 习题 127
第9章 C 反汇编 129
9.1 构造函数和析构函数 129
9.1.1 局部对象 129
9.1.2 全局对象 130
9.1.3 堆对象 133
9.1.4 参数对象 135
9.1.5 返回值对象 137
9.2 虚函数 139
9.3 继承与多态 143
9.4 本章小结 150
9.5 习题 150
第10章 其他编程知识 151
10.1 C语言常用功能 151
10.1.1 文件处理 151
10.1.2 多线程 152
10.1.3 网络 155
10.2 数据结构和算法 159
10.2.1 线性结构 160
10.2.2 树 172
10.2.3 排序算法 178
10.3 本章小结 190
第11章 二进制漏洞挖掘(PWN) 191
11.1 Linux安全机制 191
11.1.1 Stack Canaries 191
11.1.2 No-eXecute 193
11.1.3 ASLR 193
11.1.4 RELRO 195
11.2 pwntools 196
11.3 shellcode 197
11.3.1 编写shellcode 197
11.3.2 通过pwntools生成
shellcode 200
11.3.3 使用其他方式获取
shellcode 200
11.4 整数溢出 201
11.5 格式化字符串漏洞 203
11.5.1 数据泄露 204
11.5.2 数据写入 205
11.6 栈溢出与ROP 205
11.6.1 ret2text 205
11.6.2 ret2shellcode 207
11.6.3 ret2libc 210
11.7 堆溢出 217
11.7.1 堆基本数据结构 217
11.7.2 堆空闲管理结构 218
11.7.3 malloc基本流程 219
11.7.4 free基本流程 220
11.7.5 堆溢出漏洞 220
11.8 本章小结 235
第12章 软件逆向分析 236
12.1 文件格式 236
12.1.1 PE文件格式 236
12.1.2 ELF文件格式 241
12.2 加密算法识别 244
12.2.1 Base64 244
12.2.2 MD5 245
12.2.3 TEA 245
12.2.4 DES 246
12.2.5 RC4 247
12.2.6 算法识别 248
12.3 加壳与脱壳 249
12.3.1 基本概念 249
12.3.2 脱壳方法 250
12.4 分析案例 251
12.4.1 CTF案例 251
12.4.2 CrackMe案例 256
12.4.3 病毒分析 264
12.5 本章小结 269