x64匯編語(yǔ)言:從新手到AVX專(zhuān)家
定 價(jià):88 元
- 作者:[比] 喬·范·霍伊(Jo Van Hoey) 著 賈玉彬 王昱波 譯
- 出版時(shí)間:2022/1/1
- ISBN:9787302595465
- 出 版 社:清華大學(xué)出版社
- 中圖法分類(lèi):TP313
- 頁(yè)碼:368
- 紙張:
- 版次:1
- 開(kāi)本:
主要內(nèi)容
.了解 CPU和內(nèi)存的工作原理
.理解計(jì)算機(jī)和操作系統(tǒng)如何協(xié)同工作
.了解高級(jí)語(yǔ)言編譯器如何生成機(jī)器語(yǔ)言,并使用這些知識(shí)編寫(xiě)更高效的代碼
. 更好地分析程序中的錯(cuò)誤
. 讓程序正常工作,這一部分十分有趣
. 調(diào)查惡意軟件并采取必要的行動(dòng)加以預(yù)防
學(xué)習(xí)匯編語(yǔ)言可能會(huì)令人沮喪,不僅僅是因?yàn)樗且环N無(wú)情的語(yǔ)言。 在任何可能的情況下,計(jì)算機(jī)都會(huì)對(duì)你發(fā)飆。你可能只是在不知不覺(jué)中引入了一個(gè)隱藏的錯(cuò)誤,該錯(cuò)誤會(huì)在以后的程序中或執(zhí)行時(shí)讓你發(fā)狂。除此之外,學(xué)習(xí)曲線陡峭,語(yǔ)言晦澀難懂,英特爾官方文檔鋪天蓋地,并且可用的開(kāi)發(fā)工具各有其古怪之處。
在《x64匯編語(yǔ)言:從新手到AVX專(zhuān)家》中,你將從簡(jiǎn)單的程序開(kāi)始學(xué)習(xí),直到高級(jí)矢量擴(kuò)展(AVX)編程。 到《x64匯編語(yǔ)言:從新手到AVX專(zhuān)家》結(jié)尾,你將能編寫(xiě)和閱讀匯編代碼,將匯編語(yǔ)言與更高級(jí)的語(yǔ)言混合在一起使用,并對(duì)AVX有初步的了解!秞64匯編語(yǔ)言:從新手到AVX專(zhuān)家》的目的是向你展示如何使用匯編語(yǔ)言指令!秞64匯編語(yǔ)言:從新手到AVX專(zhuān)家》不是關(guān)于編程風(fēng)格或代碼性能優(yōu)化的。 在掌握匯編的基本知識(shí)之后,你可以繼續(xù)學(xué)習(xí)如何優(yōu)化代碼!秞64匯編語(yǔ)言:從新手到AVX專(zhuān)家》不應(yīng)該是你學(xué)習(xí)編程的本書(shū)。如果你沒(méi)有任何編程經(jīng)驗(yàn),請(qǐng)將《x64匯編語(yǔ)言:從新手到AVX專(zhuān)家》擱置一段時(shí)間,先學(xué)習(xí)更高級(jí)語(yǔ)言(如C)的一些編程基礎(chǔ)知識(shí)。
可掃描封底二維碼下載《x64匯編語(yǔ)言:從新手到AVX專(zhuān)家》的所有源代碼。《x64匯編語(yǔ)言:從新手到AVX專(zhuān)家》使用的代碼都盡可能地簡(jiǎn)單,這意味著沒(méi)有圖形用戶界面、繁雜的程序或錯(cuò)誤檢查,因?yàn)樘砑铀羞@些特性會(huì)使我們的注意力偏離學(xué)習(xí)匯編語(yǔ)言的目的。
理論知識(shí)被嚴(yán)格限制在限度:關(guān)于二進(jìn)制數(shù)的一點(diǎn)知識(shí)、邏輯運(yùn)算符的簡(jiǎn)短介紹以及一些有限的線性代數(shù)。我們將遠(yuǎn)離浮點(diǎn)轉(zhuǎn)換。如果你需要轉(zhuǎn)換二進(jìn)制或十六進(jìn)制數(shù),請(qǐng)找一個(gè)可以為你執(zhí)行此類(lèi)操作的網(wǎng)站。不要浪費(fèi)時(shí)間執(zhí)行手工計(jì)算。堅(jiān)持目標(biāo):學(xué)習(xí)匯編。
匯編代碼以完整的程序呈現(xiàn),這樣你就可以在計(jì)算機(jī)上測(cè)試它們、操作它們、更改它們、破壞它們。
還將展示可以使用哪些工具、如何使用它們以及這些工具的潛在問(wèn)題。擁有正確工具對(duì)于克服陡峭學(xué)習(xí)曲線至關(guān)重要。有時(shí)會(huì)指出可能有用或提供更多詳細(xì)信息的書(shū)籍、白皮書(shū)和網(wǎng)站。
我們無(wú)意為你提供所有匯編指令的綜合課程。 內(nèi)容太多了,僅用一本書(shū)講述是不可能的(請(qǐng)看英特爾手冊(cè)的大小)。我們將介紹主要的指令,以便你對(duì)匯編語(yǔ)言有所了解。如果通讀《x64匯編語(yǔ)言:從新手到AVX專(zhuān)家》,你將獲得學(xué)習(xí)匯編的必要知識(shí),你還可以自行詳細(xì)研究某些感興趣的領(lǐng)域。讀完《x64匯編語(yǔ)言:從新手到AVX專(zhuān)家》后,你將可以進(jìn)一步學(xué)習(xí)英特爾手冊(cè),并嘗試?yán)斫馄鋬?nèi)容。
《x64匯編語(yǔ)言:從新手到AVX專(zhuān)家》的大部分內(nèi)容專(zhuān)門(mén)針對(duì)Linux上的匯編,因?yàn)樗菍W(xué)習(xí)匯編語(yǔ)言的簡(jiǎn)單平臺(tái)。后,我們提供了一些章節(jié)以幫助你了解如何在Windows上進(jìn)行匯編。 你將看到,一旦掌握了Linux匯編,進(jìn)行Windows匯編會(huì)更容易。
有許多可與英特爾處理器一起使用的匯編器,例如FASM、MASM、GAS、NASM和YASM。我們將在《x64匯編語(yǔ)言:從新手到AVX專(zhuān)家》中使用NASM,因?yàn)樗嵌嗥脚_(tái)的,在Linux、Windows和macOS上都可用,具有較大的用戶群。但不必?fù)?dān)心,一旦你熟悉一種匯編器,學(xué)習(xí)另一種匯編方言就很容易。
我們已經(jīng)仔細(xì)編寫(xiě)并測(cè)試了《x64匯編語(yǔ)言:從新手到AVX專(zhuān)家》使用的代碼。但是,如果文本中有錯(cuò)別字或程序中有錯(cuò)誤,我們將不承擔(dān)任何責(zé)任。我們將錯(cuò)誤歸咎于兩只貓,它們喜歡在我們打字的時(shí)候走過(guò)我們的鍵盤(pán)。
我們?cè)凇秞64匯編語(yǔ)言:從新手到AVX專(zhuān)家》中提出的想法和觀點(diǎn)僅代表我們自己,并不代表IBM的立場(chǎng)、戰(zhàn)略或觀點(diǎn)。
Jo Van Hoey擁有40年的IT行業(yè)從業(yè)經(jīng)驗(yàn),包括各種職能部門(mén)、多家IT公司和各種計(jì)算平臺(tái)。他近從IBM大型機(jī)軟件客戶經(jīng)理職位上退休。出于對(duì)IT安全的興趣,Jo長(zhǎng)期深入研究匯編語(yǔ)言,因?yàn)閰R編語(yǔ)言知識(shí)是保護(hù)IT基礎(chǔ)設(shè)施抵御攻擊和惡意軟件的重要基礎(chǔ)。
第1章 你的個(gè)程序 1
1.1 編輯、匯編、鏈接和運(yùn)行(或調(diào)試) 2
1.2 匯編程序的結(jié)構(gòu) 6
1.2.1 .data段 6
1.2.2 .bss段 7
1.2.3 .txt段 8
1.3 小結(jié) 10
第2章 二進(jìn)制數(shù)、十六進(jìn)制數(shù)和寄存器 11
2.1 二進(jìn)制簡(jiǎn)短課程 11
2.1.1 整數(shù) 12
2.1.2 浮點(diǎn)數(shù) 13
2.2 寄存器簡(jiǎn)短課程 13
2.2.1 通用寄存器 14
2.2.2 指令指針寄存器(rip) 15
2.2.3 標(biāo)志寄存器(Flag Register) 15
2.2.4 xmm和ymm寄存器 16
2.3 小結(jié) 16
第3章 用調(diào)試器進(jìn)行程序分析:
GDB 17
3.1 開(kāi)始調(diào)試 17
3.2 繼續(xù)進(jìn)步 22
3.3 其他GDB命令 24
3.4 稍加改進(jìn)的hello, world程序 25
3.5 小結(jié) 27
第4章 你的下一個(gè)程序:
Alive and Kicking 29
4.1 alive程序分析 30
4.2 打印 34
4.3 小結(jié) 37
第5章 匯編是基于邏輯的 39
5.1 NOT 39
5.2 OR 39
5.3 XOR 40
5.4 AND 41
5.5 小結(jié) 42
第6章 數(shù)據(jù)顯示調(diào)試器 43
6.1 使用DDD 43
6.2 小結(jié) 46
第7章 跳轉(zhuǎn)和循環(huán) 47
7.1 安裝SimpleASM 47
7.2 使用SASM 47
7.3 小結(jié) 54
第8章 內(nèi)存 55
8.1 探索內(nèi)存 55
8.2 小結(jié) 62
第9章 整數(shù)運(yùn)算 63
9.1 從整數(shù)算術(shù)開(kāi)始 63
9.2 分析算術(shù)指令 67
9.3 小結(jié) 69
第10章 堆棧 71
10.1 理解堆棧 71
10.2 跟蹤堆棧 74
10.3 小結(jié) 76
第11章 浮點(diǎn)運(yùn)算 77
11.1 單精度與雙精度 77
11.2 浮點(diǎn)數(shù)編程 78
11.3 小結(jié) 81
第12章 函數(shù) 83
12.1 編寫(xiě)一個(gè)簡(jiǎn)單的函數(shù) 83
12.2 更多函數(shù) 85
12.3 小結(jié) 87
第13章 棧對(duì)齊和棧幀 89
13.1 棧對(duì)齊 89
13.2 有關(guān)棧幀的更多信息 91
13.3 小結(jié) 92
第14章 外部函數(shù) 93
14.1 編譯并鏈接函數(shù) 93
14.2 擴(kuò)展makefile 97
14.3 小結(jié) 98
第15章 調(diào)用約定 99
15.1 函數(shù)參數(shù) 100
15.2 棧布局 103
15.3 保留寄存器 106
15.4 小結(jié) 107
第16章 位運(yùn)算 109
16.1 基礎(chǔ) 109
16.2 算術(shù) 115
16.3 小結(jié) 119
第17章 位操作 121
17.1 修改位的其他方法 121
17.2 位標(biāo)志變量 124
17.3 小結(jié) 125
第18章 宏 127
18.1 編寫(xiě)宏 127
18.2 使用objdump 129
18.3 小結(jié) 130
第19章 控制臺(tái)I/O 131
19.1 使用I/O 131
19.2 處理溢出 133
19.3 小結(jié) 137
第20章 文件I/O 139
20.1 使用syscall 139
20.2 文件處理 140
20.3 條件匯編 149
20.4 文件操作指令 149
20.5 小結(jié) 151
第21章 命令行 153
21.1 訪問(wèn)命令行參數(shù) 153
21.2 調(diào)試命令行 154
21.3 小結(jié) 156
第22章 從C到匯編 157
22.1 編寫(xiě)C源文件 157
22.2 編寫(xiě)匯編代碼 159
22.3 小結(jié) 164
第23章 內(nèi)聯(lián)匯編 165
23.1 基本內(nèi)聯(lián)匯編 165
23.2 擴(kuò)展內(nèi)聯(lián)匯編 167
23.3 小結(jié) 170
第24章 字符串 171
24.1 移動(dòng)字符串 171
24.2 比較和掃描字符串 176
24.3 小結(jié) 181
第25章 cpuid 183
25.1 使用cpuid 183
25.2 使用test指令 186
25.3 小結(jié) 188
第26章 SIMD 189
26.1 標(biāo)量數(shù)據(jù)和打包數(shù)據(jù) 189
26.2 數(shù)據(jù)對(duì)齊與不對(duì)齊 191
26.3 小結(jié) 192
第27章 小心mxcsr 193
27.1 操作mxcsr的位 194
27.2 分析程序 201
27.3 小結(jié) 202
第28章 SSE對(duì)齊 203
28.1 未對(duì)齊示例 203
28.2 對(duì)齊示例 206
28.3 小結(jié) 210
第29章 SSE打包整數(shù) 211
29.1 適用于整數(shù)的SSE指令 211
29.2 分析代碼 213
29.3 小結(jié) 214
第30章 SSE字符串操作 215
30.1 imm8控制字節(jié) 216
30.2 使用imm8控制字節(jié) 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 標(biāo)志 219
30.3 小結(jié) 220
第31章 搜索字符 221
31.1 確定字符串的長(zhǎng)度 221
31.2 在字符串中搜索 224
31.3 小結(jié) 228
第32章 比較字符串 229
32.1 隱式長(zhǎng)度 229
32.2 顯式長(zhǎng)度 232
32.3 小結(jié) 236
第33章 重排 237
33.1 重排初探 237
33.2 重排廣播 243
33.3 重排反轉(zhuǎn) 244
33.4 重排旋轉(zhuǎn) 245
33.5 重排字節(jié) 245
33.6 小結(jié) 246
第34章 SSE字符串掩碼 247
34.1 搜索字符 247
34.2 搜索某個(gè)范圍內(nèi)的字符 253
34.3 搜索子字符串 258
34.4 小結(jié) 262
第35章 AVX 263
35.1 測(cè)試是否支持AVX 263
35.2 AVX程序示例 265
35.3 小結(jié) 270
第36章 AVX矩陣運(yùn)算 271
36.1 矩陣代碼示例 271
36.2 矩陣打。簆rintm4x4 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 小結(jié) 289
第37章 矩陣轉(zhuǎn)置 291
37.1 轉(zhuǎn)置代碼示例 291
37.2 解包版本 295
37.3 重排版本 299
37.4 小結(jié) 301
第38章 性能調(diào)優(yōu) 303
38.1 轉(zhuǎn)置計(jì)算性能 303
38.2 跡計(jì)算性能 310
38.3 小結(jié) 317
第39章 你好,Windows的世界 319
39.1 入門(mén) 319
39.2 編寫(xiě)一些代碼 321
39.3 調(diào)試 323
39.4 syscall 323
39.5 小結(jié) 323
第40章 使用Windows API 325
40.1 控制臺(tái)輸出 325
40.2 編譯Windows程序 328
40.3 小結(jié) 330
第41章 Windows中的函數(shù) 331
41.1 使用四個(gè)以上的參數(shù) 331
41.2 使用浮點(diǎn)數(shù) 337
41.3 小結(jié) 339
第42章 可變參數(shù)函數(shù) 341
42.1 Windows中的可變參數(shù)函數(shù) 341
42.2 混合值 343
42.3 小結(jié) 345
第43章 Windows文件 347
43.1 小結(jié) 350
后記 351