x64汇编语言:从新手到AVX专家

第1章 你的个程序 1
1.1 编辑、汇编、链接和运行(或调试) 2
1.2 汇编程序的结构 6
1.2.1 .data段 6
1.2.2 .bss段 7
1.2.3 .txt段 8
1.3 小结 10
第2章 二进制数、十六进制数和寄存器 11
2.1 二进制简短课程 11
2.1.1 整数 12
2.1.2 浮点数 13
2.2 寄存器简短课程 13
2.2.1 通用寄存器 14
2.2.2 指令指针寄存器(rip) 15
2.2.3 标志寄存器(Flag Register) 15
2.2.4 xmm和ymm寄存器 16
2.3 小结 16
第3章 用调试器进行程序分析:
GDB 17
3.1 开始调试 17
3.2 继续进步 22
3.3 其他GDB命令 24
3.4 稍加改进的hello, world程序 25
3.5 小结 27
第4章 你的下一个程序:
Alive and Kicking 29
4.1 alive程序分析 30
4.2 打印 34
4.3 小结 37
第5章 汇编是基于逻辑的 39
5.1 NOT 39
5.2 OR 39
5.3 XOR 40
5.4 AND 41
5.5 小结 42
第6章 数据显示调试器 43
6.1 使用DDD 43
6.2 小结 46
第7章 跳转和循环 47
7.1 安装SimpleASM 47
7.2 使用SASM 47
7.3 小结 54
第8章 内存 55
8.1 探索内存 55
8.2 小结 62
第9章 整数运算 63
9.1 从整数算术开始 63
9.2 分析算术指令 67
9.3 小结 69
第10章 堆栈 71
10.1 理解堆栈 71
10.2 跟踪堆栈 74
10.3 小结 76
第11章 浮点运算 77
11.1 单精度与双精度 77
11.2 浮点数编程 78
11.3 小结 81
第12章 函数 83
12.1 编写一个简单的函数 83
12.2 更多函数 85
12.3 小结 87
第13章 栈对齐和栈帧 89
13.1 栈对齐 89
13.2 有关栈帧的更多信息 91
13.3 小结 92
第14章 外部函数 93
14.1 编译并链接函数 93
14.2 扩展makefile 97
14.3 小结 98
第15章 调用约定 99
15.1 函数参数 100
15.2 栈布局 103
15.3 保留寄存器 106
15.4 小结 107
第16章 位运算 109
16.1 基础 109
16.2 算术 115
16.3 小结 119
第17章 位操作 121
17.1 修改位的其他方法 121
17.2 位标志变量 124
17.3 小结 125
第18章 宏 127
18.1 编写宏 127
18.2 使用objdump 129
18.3 小结 130
第19章 控制台I/O 131
19.1 使用I/O 131
19.2 处理溢出 133
19.3 小结 137
第20章 文件I/O 139
20.1 使用syscall 139
20.2 文件处理 140
20.3 条件汇编 149
20.4 文件操作指令 149
20.5 小结 151
第21章 命令行 153
21.1 访问命令行参数 153
21.2 调试命令行 154
21.3 小结 156
第22章 从C到汇编 157
22.1 编写C源文件 157
22.2 编写汇编代码 159
22.3 小结 164
第23章 内联汇编 165
23.1 基本内联汇编 165
23.2 扩展内联汇编 167
23.3 小结 170
第24章 字符串 171
24.1 移动字符串 171
24.2 比较和扫描字符串 176
24.3 小结 181
第25章 cpuid 183
25.1 使用cpuid 183
25.2 使用test指令 186
25.3 小结 188
第26章 SIMD 189
26.1 标量数据和打包数据 189
26.2 数据对齐与不对齐 191
26.3 小结 192
第27章 小心mxcsr 193
27.1 操作mxcsr的位 194
27.2 分析程序 201
27.3 小结 202
第28章 SSE对齐 203
28.1 未对齐示例 203
28.2 对齐示例 206
28.3 小结 210
第29章 SSE打包整数 211
29.1 适用于整数的SSE指令 211
29.2 分析代码 213
29.3 小结 214
第30章 SSE字符串操作 215
30.1 imm8控制字节 216
30.2 使用imm8控制字节 217
30.2.1 位0和1 217
30.2.2 位2和3 217
30.2.3 位4和5 218
30.2.4 位6 218
30.2.5 位7 219
30.2.6 标志 219
30.3 小结 220
第31章 搜索字符 221
31.1 确定字符串的长度 221
31.2 在字符串中搜索 224
31.3 小结 228
第32章 比较字符串 229
32.1 隐式长度 229
32.2 显式长度 232
32.3 小结 236
第33章 重排 237
33.1 重排初探 237
33.2 重排广播 243
33.3 重排反转 244
33.4 重排旋转 245
33.5 重排字节 245
33.6 小结 246
第34章 SSE字符串掩码 247
34.1 搜索字符 247
34.2 搜索某个范围内的字符 253
34.3 搜索子字符串 258
34.4 小结 262
第35章 AVX 263
35.1 测试是否支持AVX 263
35.2 AVX程序示例 265
35.3 小结 270
第36章 AVX矩阵运算 271
36.1 矩阵代码示例 271
36.2 矩阵打印:printm4x4 281
36.3 矩阵乘法:multi4x4 281
36.4 矩阵求逆:Inverse4x4 284
36.4.1 Cayley-Hamilton定理 284
36.4.2 Leverrier算法 285
36.4.3 代码 286
36.5 小结 289
第37章 矩阵转置 291
37.1 转置代码示例 291
37.2 解包版本 295
37.3 重排版本 299
37.4 小结 301
第38章 性能调优 303
38.1 转置计算性能 303
38.2 迹计算性能 310
38.3 小结 317
第39章 你好,Windows的世界 319
39.1 入门 319
39.2 编写一些代码 321
39.3 调试 323
39.4 syscall 323
39.5 小结 323
第40章 使用Windows API 325
40.1 控制台输出 325
40.2 编译Windows程序 328
40.3 小结 330
第41章 Windows中的函数 331
41.1 使用四个以上的参数 331
41.2 使用浮点数 337
41.3 小结 339
第42章 可变参数函数 341
42.1 Windows中的可变参数函数 341
42.2 混合值 343
42.3 小结 345
第43章 Windows文件 347
43.1 小结 350
后记 351
1.1 编辑、汇编、链接和运行(或调试) 2
1.2 汇编程序的结构 6
1.2.1 .data段 6
1.2.2 .bss段 7
1.2.3 .txt段 8
1.3 小结 10
第2章 二进制数、十六进制数和寄存器 11
2.1 二进制简短课程 11
2.1.1 整数 12
2.1.2 浮点数 13
2.2 寄存器简短课程 13
2.2.1 通用寄存器 14
2.2.2 指令指针寄存器(rip) 15
2.2.3 标志寄存器(Flag Register) 15
2.2.4 xmm和ymm寄存器 16
2.3 小结 16
第3章 用调试器进行程序分析:
GDB 17
3.1 开始调试 17
3.2 继续进步 22
3.3 其他GDB命令 24
3.4 稍加改进的hello, world程序 25
3.5 小结 27
第4章 你的下一个程序:
Alive and Kicking 29
4.1 alive程序分析 30
4.2 打印 34
4.3 小结 37
第5章 汇编是基于逻辑的 39
5.1 NOT 39
5.2 OR 39
5.3 XOR 40
5.4 AND 41
5.5 小结 42
第6章 数据显示调试器 43
6.1 使用DDD 43
6.2 小结 46
第7章 跳转和循环 47
7.1 安装SimpleASM 47
7.2 使用SASM 47
7.3 小结 54
第8章 内存 55
8.1 探索内存 55
8.2 小结 62
第9章 整数运算 63
9.1 从整数算术开始 63
9.2 分析算术指令 67
9.3 小结 69
第10章 堆栈 71
10.1 理解堆栈 71
10.2 跟踪堆栈 74
10.3 小结 76
第11章 浮点运算 77
11.1 单精度与双精度 77
11.2 浮点数编程 78
11.3 小结 81
第12章 函数 83
12.1 编写一个简单的函数 83
12.2 更多函数 85
12.3 小结 87
第13章 栈对齐和栈帧 89
13.1 栈对齐 89
13.2 有关栈帧的更多信息 91
13.3 小结 92
第14章 外部函数 93
14.1 编译并链接函数 93
14.2 扩展makefile 97
14.3 小结 98
第15章 调用约定 99
15.1 函数参数 100
15.2 栈布局 103
15.3 保留寄存器 106
15.4 小结 107
第16章 位运算 109
16.1 基础 109
16.2 算术 115
16.3 小结 119
第17章 位操作 121
17.1 修改位的其他方法 121
17.2 位标志变量 124
17.3 小结 125
第18章 宏 127
18.1 编写宏 127
18.2 使用objdump 129
18.3 小结 130
第19章 控制台I/O 131
19.1 使用I/O 131
19.2 处理溢出 133
19.3 小结 137
第20章 文件I/O 139
20.1 使用syscall 139
20.2 文件处理 140
20.3 条件汇编 149
20.4 文件操作指令 149
20.5 小结 151
第21章 命令行 153
21.1 访问命令行参数 153
21.2 调试命令行 154
21.3 小结 156
第22章 从C到汇编 157
22.1 编写C源文件 157
22.2 编写汇编代码 159
22.3 小结 164
第23章 内联汇编 165
23.1 基本内联汇编 165
23.2 扩展内联汇编 167
23.3 小结 170
第24章 字符串 171
24.1 移动字符串 171
24.2 比较和扫描字符串 176
24.3 小结 181
第25章 cpuid 183
25.1 使用cpuid 183
25.2 使用test指令 186
25.3 小结 188
第26章 SIMD 189
26.1 标量数据和打包数据 189
26.2 数据对齐与不对齐 191
26.3 小结 192
第27章 小心mxcsr 193
27.1 操作mxcsr的位 194
27.2 分析程序 201
27.3 小结 202
第28章 SSE对齐 203
28.1 未对齐示例 203
28.2 对齐示例 206
28.3 小结 210
第29章 SSE打包整数 211
29.1 适用于整数的SSE指令 211
29.2 分析代码 213
29.3 小结 214
第30章 SSE字符串操作 215
30.1 imm8控制字节 216
30.2 使用imm8控制字节 217
30.2.1 位0和1 217
30.2.2 位2和3 217
30.2.3 位4和5 218
30.2.4 位6 218
30.2.5 位7 219
30.2.6 标志 219
30.3 小结 220
第31章 搜索字符 221
31.1 确定字符串的长度 221
31.2 在字符串中搜索 224
31.3 小结 228
第32章 比较字符串 229
32.1 隐式长度 229
32.2 显式长度 232
32.3 小结 236
第33章 重排 237
33.1 重排初探 237
33.2 重排广播 243
33.3 重排反转 244
33.4 重排旋转 245
33.5 重排字节 245
33.6 小结 246
第34章 SSE字符串掩码 247
34.1 搜索字符 247
34.2 搜索某个范围内的字符 253
34.3 搜索子字符串 258
34.4 小结 262
第35章 AVX 263
35.1 测试是否支持AVX 263
35.2 AVX程序示例 265
35.3 小结 270
第36章 AVX矩阵运算 271
36.1 矩阵代码示例 271
36.2 矩阵打印:printm4x4 281
36.3 矩阵乘法:multi4x4 281
36.4 矩阵求逆:Inverse4x4 284
36.4.1 Cayley-Hamilton定理 284
36.4.2 Leverrier算法 285
36.4.3 代码 286
36.5 小结 289
第37章 矩阵转置 291
37.1 转置代码示例 291
37.2 解包版本 295
37.3 重排版本 299
37.4 小结 301
第38章 性能调优 303
38.1 转置计算性能 303
38.2 迹计算性能 310
38.3 小结 317
第39章 你好,Windows的世界 319
39.1 入门 319
39.2 编写一些代码 321
39.3 调试 323
39.4 syscall 323
39.5 小结 323
第40章 使用Windows API 325
40.1 控制台输出 325
40.2 编译Windows程序 328
40.3 小结 330
第41章 Windows中的函数 331
41.1 使用四个以上的参数 331
41.2 使用浮点数 337
41.3 小结 339
第42章 可变参数函数 341
42.1 Windows中的可变参数函数 341
42.2 混合值 343
42.3 小结 345
第43章 Windows文件 347
43.1 小结 350
后记 351
Jo Van Hoey拥有40年的IT行业从业经验,包括各种职能部门、多家IT公司和各种计算平台。他近从IBM大型机软件客户经理职位上退休。出于对IT安全的兴趣,Jo长期深入研究汇编语言,因为汇编语言知识是保护IT基础设施抵御攻击和恶意软件的重要基础。
主要内容
.了解 CPU和内存的工作原理
.理解计算机和作系统如何协同工作
.了解高级语言编译器如何生成机器语言,并使用这些知识编写更高效的代码
. 更好地分析程序中的错误
. 让程序正常工作,这一部分十分有趣
. 调查恶意软件并采取必要的行动加以预防
.了解 CPU和内存的工作原理
.理解计算机和作系统如何协同工作
.了解高级语言编译器如何生成机器语言,并使用这些知识编写更高效的代码
. 更好地分析程序中的错误
. 让程序正常工作,这一部分十分有趣
. 调查恶意软件并采取必要的行动加以预防
比价列表价格走势