TOP
月月讀書金,登入即領,滿600現折50!!
逆向工程權威指南(全二冊) (簡體書)
滿額折

逆向工程權威指南(全二冊) (簡體書)

商品資訊

人民幣定價:168 元
定價
:NT$ 1008 元
優惠價
87877
絕版無法訂購
無法訂購
商品簡介
目次

商品簡介

逆向工程是一種分析目標系統的過程,旨在於識別系統的各元件以及元件間關係,以便於通過其他形式、或在較高的抽象層次上,重建系統的表徵。
本書專注於軟體的逆向工程,是寫給初學者的一本經典指南。全書共分為12個部分,共102章,涉及X86/X64、ARM/ARM-64、MIPS、Java/JVM等重要話題,詳細解析了Oracle RDBMS、Itanium、軟體狗、LD_PRELOAD、棧溢出、ELF、Win32 PE檔格式、x86-64(第、critical sections、syscalls、線程本地存儲TLS、位址無關代碼(PIC)、以配置檔為導向的優化、C++ STL、OpenMP、SHE等眾多技術話題,堪稱是逆向工程技術百科全書。除了詳細講解,本書來給出了很多習題來幫助讀者鞏固所學的知識,附錄部分給出了習題的解答。
本書適合對逆向工程技術、作業系統底層技術、程式分析技術感興趣的讀者閱讀,也適合專業的程式開發人員參考。

目次

第一部分編碼模式
第1章CPU簡介3
1.1指令集的作用3
第2章最簡函數5
2.1 x86 5
2.2 ARM 5
2.3 MIPS 5
2.3.1 MIPS指令集與寄存器名稱6
第3章Hello,world!7
3.1 x86 7
3.1.1 MSVC 7
3.1.2 GCC 9
3.1.3 GCC:AT&T語體9
3.2 x86-64 11
3.2.1 MSVC-x86-64 11
3.2.2 GCC-x86-64 12
3.3 GCC的其他特性12
3.4 ARM 13
3.4.1 Keil 6/2013——未啟用優化功能的ARM模式14
3.4.2 Thumb模式下、未開啟優化選項的Keil 15
3.4.3 ARM模式下、開啟優化選項的Xcode 15
3.4 .4 Thumb-2模式下、開啟優化選項的Xcode(LLVM) 16
3.4.5 ARM64 18
3.5 MIPS 19
3.5.1全局指針Global pointer 19
3.5.2 Optimizing GCC 19
3.5.3 Non-optimizing GCC 21
3.5.4棧幀23
3.5.5 Optimizing GCC: GDB的分析方法23
3.6總結24
3.7練習24
3.7.1題目1 24
3.7.2題目2 24
第4章函數序言和函數尾聲25
4.1遞歸調用25
第5章棧26
5.1為什麼棧會逆增長?26
5.2棧的用途27
5.2.1保存函數結束時的返回地址27
5.2.2參數傳遞28
5.2.3存儲局部變量29
5.2.4 x86:alloca()函數29
5.2.5 (Windows)SEH結構化
異常處理31
5.2.6緩衝區溢出保護31
5.3典型的棧的內存存儲格式31
5.4棧的噪音31
5.5練習題34
5.5.1題目1 34
5.5.2題目2 34
第6章printf()函數與參數調用36
6.1 x86 36
6.1.1 x86:傳遞3個參數36
6.1.2 x64:傳遞9個參數41
6.2 ARM 44
6.2.1 ARM模式下傳遞3個參數44
6.2.2 ARM模式下傳遞8個參數46
6.3 MIPS 50
6.3.1傳遞3個參數50
6.3.2傳遞9個參數52
6.4總結56
6.5其他57
第7章scanf() 58
7.1演示案例58
7.1.1指針簡介58
7.1.2 x86 58
7.1.3 MSVC+OllyDbg 60
7.1.4 x64 62
7.1.5 ARM 63
7.1.6 MIPS 64
7.2全局變量65
7.2.1 MSVC:x86 66
7.2.2 MSVC:x86+OllyDbg 67
7.2.3 GCC:x86 68
7.2.4 MSVC:x64 68
7.2.5 ARM: Optimizing Keil 6/2013
(Thumb模式) 69
7.2.6 ARM64 70
7.2.7 MIPS 70
7.3 scanf()函數的狀態監測74
7.3.1 MSVC:x86 74
7.3.2 MSVC:x 86:IDA 75
7.3.3 MSVC:x86+OllyDbg 77
7.3.4 MSVC:x86+Hiew 78
7.3.5 MSVC:x64 79
7.3.6 ARM 80
7.3.7 MIPS 81
7.3.8練習題82
第8章參數獲取83
8.1 x86 83
8.1.1 MSVC 83
8.1.2 MSVC+OllyDbg 84
8.1.3 GCC 84
8.2 x64 85
8.2.1 MSVC 85
8.2.2 GCC 86
8.2.3 GCC: uint64_t型參數87
8.3 ARM 88
8.3.1 Non -optimizing Keil 6/2013
(ARM mode) 88
8.3.2 Optimizing Keil 6/2013
(ARM mode) 89
8.3.3 Optimizing Keil 6/2013
(Thumb mode) 89
8.3.4 ARM64 89
8.4 MIPS 91
第9章返回值93
9.1 void型函數的返回值93
9.2函數返回值不被調用的情況94
9.3返回值為結構體型數據94
第10章指針96
10.1全局變量96
10.2局部變量98
10.3總結100
第11章GOTO語句101
11.1無用代碼Dead Code 102
11.2練習題102
第12章條件轉移指令103
12.1數值比較103
12.1.1 x86 103
12.1.2 ARM 109
12.1.3 MIPS 112
12.2計算絕對值115
12.2.1 Optimizing MSVC 115
12.2.2 Optimizing Keil 6/2013: Thumb
 mode 116
12.2.3 Optimizing Keil 6/2013: ARM
 mode 116
12.2.4 Non-optimizng GCC 4.9
 (ARM64) 116
12.2.5 MIPS 117
12.2.6不使用轉移指令117
12.3條件運算符117
12.3.1 x86 117
12.3.2 ARM 118
12.3.3 ARM64 119
12.3.4 MIPS 119
12.3.5使用if/else替代條件運算符120
12.3.6總結120
12.3.7練習題120
12.4比較最大值和最小值120
12.4.1 32位120
12.4.2 64位123
12.4.3 MIPS 125
12.5總結125
12.5.1 x86 125
12.5.2 ARM 125
12.5 .3 MIPS 126
12.5.4不使用轉移指令126
第13章switch()/case/default 128
13.1 case陳述式較少的情況128
13.1.1 x86 128
13.1.2 ARM: Optimizing Keil 6/2013
 (ARM mode ) 133
13.1.3 ARM: Optimizing Keil 6/2013
 (Thumb mode) 133
13.1.4 ARM64: Non-optimizing GCC
 (Linaro) 4.9 134
13.1.5 ARM64: Optimizing GCC
 (Linaro) 4.9 134
13.1.6 MIPS 135
13.1. 7總結136
13.2多個case從句136
13.2.1 x86 136
13.2.2 ARM: Optimizing Keil 6/2013
 (ARM mode) 140
13.2.3 ARM: Optimizing Keil 6/2013
 (Thumb mode) 141
13.2.4 MIPS 143
13.2 .5總結144
13.3 case從句多對一的情況145
13.3.1 MSVC 145
13.3.2 GCC 147
13.3.3 ARM64: Optimizing
 GCC 4.9.1 147
13.4 Fal l-through 149
13.4.1 MSVC x86 149
13.4.2 ARM64 150
13.5練習題151
13.5.1題目1 151
第14章循環152
14.1舉例說明152
14.1.1 x86 152
14.1.2 x86:OllyDbg 155
14.1.3 x86 :跟踪調試工具tracer 156
14.1.4 ARM 157
14.1.5 MIPS 160
14.1.6其他161
14.2內存塊複製161
14.2.1編譯結果161
14.2.2編譯為ARM模式的
 程序162
14.2.3 MIPS 163
14.2.4矢量化技術164
14.3總結164
14.4練習題165
14.4.1題目1 165
14.4.2題目2 165
14.4.3題目3 166
14.4.4題目4 167
第15章C語言字符串的函數170
15.1 strlen() 170
15.1.1 x86 170
15.1.2 ARM 174
15.1.3 MIPS 177
15.2練習題178
15.2.1練習題1 178
第16章數學計算指令的替換181
16.1乘法181
16.1.1替換為加法運算181
16.1.2替換為位移運算181
16.1.3替換為位移、加減法的
 混合運算182
16.2除法運算186
16.2.1替換為位移運算186
16.3練習題186
16.3.1題目2 186
第17章FPU 188
17.1 IEEE 754 188
17.2 x86 188
17.3 ARM、MIPD、x86/x64 SIMD 188
17.4 C/C++ 188
17.5舉 說明189
17.5.1 x86 189
17.5.2 ARM: Optimizing Xcode
 4.6.3 (LLVM) (ARM mode) 193
17.5.3 ARM: Optimizing Keil 6/2013
 (Thumb mode) 193
17.5.4 ARM64: Optimizing GCC
 (Linaro) 4.9 194
17.5.5 ARM64: Non-optimizing GCC
 (Linaro) 4.9 195
17.5.6 MIPS 195
17.6利用參數傳遞浮點型數據196
17.6.1 x86 196
17.6.2 ARM + Non-optimizing
 Xcode 4.6.3 (LLVM)
 (Thumb-2 mode) 197
17.6.3 ARM + Non-optimizing Keil
 6/2013 (ARM mode) 198
17.6.4 ARM64 + Optimizing GCC
 (Linaro) 4.9 198
17.6.5 MIPS 199
17.7比較說明200
17.7.1 x86 200
17.7.2 ARM 216
17.7.3 ARM64 219
Optimizing GCC (Linaro) 4.9—float 220
17.7.4 MIPS 220
17.8棧、計算器及逆波蘭表示法221
17.9 x64 221
17.10練習題221
17.10.1題目1 221
17.10. 2題目2 221
第18章數組223
18.1簡介223
18.1.1 x86 223
18.1.2 ARM 225
18.1.3 MIPS 228
18.2緩衝區溢出229
18.2.1讀取數組邊界以外的內容229
18.2.2向數組邊界之外的地址賦值231
18.3緩衝區溢出的保護方法234
18.3.1 Optimizing Xcode 4.6.3 (LLVM)
 (T humb-2 mode) 236
18.4其他238
18.5字符串指針238
18.5.1 x64 239
18.5.2 32位ARM 240
18.5.3 ARM64 241
18.5.4 MIPS 242
18.5.5數組溢出242
18.6多維數組245
18.6.1二維數組舉例246
18.6.2以一維數組的方式訪問
 二維數組247
18.6.3三維數組248
18.6.4更多案例251
18.7二維字符串數組的封裝格式251
18.7.1 32位ARM 253
18.7. 2 ARM64 254
18.7.3 MIPS 254
18.7.4總結255
18.8本章小結255
18.9練習題255
18.9.1題目1 255
18.9.2題目2 258
18.9.3題目3 263
18.9.4題目4 264
18.9.5題目5 265
第19章位操作270
19.1特定位270
19.1.1 x86 270
19.1.2 ARM 272
19.2設置/清除特定位274
19.2.1 x86 274
19.2.2 ARM + Optimizing Keil 6/2013
 (ARM mode) 277
19.2. 3 ARM + Optimizing Keil 6/2013
 (Thumb mode) 278
19.2.4 ARM + Optimizing Xcode (LLVM)
 + ARM mode 278
19.2.5 ARM:BIC指令詳解278
19.2.6 ARM64: Optimizing GCC(Linaro)
 4.9 278
19.2. 7 ARM64: Non-optimizing GCC (Linaro) 4.9 279
19.2.8 MIPS 279
19.3位移279
19.4在FPU上設置特 位279
19.4.1 XOR操作詳解280
19.4.2 x86 280
19.4.3 MIPS 282
19.4.4 ARM 282
19.5位校驗284
19.5.1 x86 286
19.5.2 x64 289
19.5.3 ARM + Optimizing Xcode 4.6.3
 ( LLVM) + ARM mode 291
19.5.4 ARM + Optimizing Xcode 4.6.3
(LLVM)+ Thumb-2 mode 292
19.5.5 ARM64 + Optimizing GCC 4.9 292
19.5.6 ARM64 + Non-optimizing
 GCC 4.9 292
19.5.7 MIPS 293
19.6本章小結295
19.6.1檢測特定位(編譯階段) 295
19.6.2檢測特定位(runtime階段) 295
19.6.3設置特定位(編譯階段) 296
19.6.4設置特定位(runtime階段) 296
19.6. 5清除特定位(編譯階段) 296
19.6.6清除特定位(runtime階段) 297
19.7練習題297
19.7.1題目1 297
19.7.2題目2 298
19.7.3題目3 301
19.7.4題目4 301
第20章線性同馀法與偽隨機函數304
20.1 x86 304
20.2 x64 305
20.3 32位ARM 306
20.4 MIPS 306
20.4.1 MIPS的重新定位307
20.5本例的線程安全改進版309
第21章結構體310
21.1 MSVC: systemtime 310
21.1.1 OllyDbg 311
21.1.2以數組替代結構 體312
21.2用malloc()分配結構體的空間313
21.3 UNIX: struct tm 315
21.3.1 Linux 315
21.3.2 ARM 317
21.3.3 MIPS 319
21.3.4數組替代法320
21.3.5替換為32位words 322
21.3.6替換為字節型數組323
21.4結構體的字段封裝325
21.4.1 x86 325
21.4.2 ARM 329
21.4.3 MIPS 330
21.4.4其他331
21.5結構體的嵌套331
21.5.1 OllyDbg 332
21.6結構體中的位操作333
21.6.1 CPUID 333
21.6.2用結構體構建浮點數337
21.7練習題339
21.7.1題目1 339
21.7.2題目2 340
第22章共用體(union)類型345
22.1偽隨機數生成程序345
22.1.1 x86 346
22.1.2 MIPS 347
22.1.3 ARM (ARM mode) 348
22.2計算機器精度349
22.2.1 x86 350
22.2.2 ARM64 350
22.2.3 MIPS 351
22.2.4本章小結351
第二部分硬件基礎
第23章函數指針352
23.1 MSVC 353
23.1.1 MSVC+OllyDbg 354
23.1.2 MSVC+tracer 355
23.1.3 MSVC + tracer (code coverage) 356
23.2 GCC 357
23.2.1 GCC + GDB
(有源代碼的情況) 358
23.2.2 GCC+GDB
(沒有源代碼的情況) 359
第24章32位 系統處理64位數據362
24.1 64位返回值362
24.1.1 x86 362
24.1.2 ARM 362
24.1.3 MIPS 362
24.2參數傳遞及加減運算363
24.2.1 x86 363
24.2.2 ARM 365
24.2.3 MIPS 365
24.3乘法和除法運算366
24.3.1 x86 367
24.3.2 ARM 368
24.3.3 MIPS 369
24.4右移370
24.4.1 x86 370
24.4.2 ARM 371
24.4.3 MIPS 371
24.5 32位數據轉換為64位數據371
24.5.1 x86 372
24.5.2 ARM 372
24.5.3 MIPS 372
第25章SIMD 373
25.1並行矢量化373
25.1.1用於加法計算374
25.1.2用於內存複製379
25.2 SIMD實現strlen() 383
第26章64位平台387
26.1 x86-64 387
26.2 ARM 394
26.3浮點數394
第27章SIMD與浮點數的並行運算395
27.1樣板程序395
27.1.1 x64 395
27.1.2 x86 396
27.2傳遞浮點型參數399
27.3浮點數之間的比較400
27.3.1 x64 400
27.3.2 x86 401
27.4計算機器精確度402
27.5偽隨機數生成程序(續) 402
27.6總結403
第28章ARM指令詳解404
28.1立即數標識(#) 404
28.2變址尋址404
28.3常量賦值405
28.3.1 32位ARM 405
28.3.2 ARM 64 405
28.4重定位406
第29章MIPS的特點409
29.1加載常量409
29.2閱讀推薦409
第30章有符號數的表示方法413
第31章字節序414
31.1大端字節序414
31.2小端字節序414
31.3舉例說明414
31.4雙模二元數據格式415
31.5轉換字節序415
第32章內存佈局416
第33章CPU 417
33.1分支預測417
33.2數據相關性417
第34章哈希函數418
34.1單向函數與不可逆算法418
第三部分一些高級的例子
第35章溫度轉換421
35.1整數值421
35.1.1 x86構架下MSVC 2012
 優化421
35.1.2 x64構架下的MSVC 2012
 優化423
35.2浮點數運算423
第36章Fibonacci數列
(斐波拉契數列) 426
36.1例子1 426
36.2例子2 428
36.3總結431
第37章CRC32計算的例子432
第38章網絡地址計算實例435
38.1計算網絡地址函數
calc_network_address() 436
38.2函數form_IP () 437
38.3函數print_as_IP() 438
38.4 form_netmask()函數和set_bit()
 函數440
38.5總結440
第39章循環:幾個迭代441
39.1三個迭代441
39.2兩個 代442
39.3 Intel C++ 2011實例443
第40章Duff的裝置446
第41章除以9 449
41.1 x86 449
41.2 ARM 450
41.2.1 ARM模式下,採用Xcode 4.6.3
(LLVM)優化450
41.2.2 Thumb- 2模式下的Xcode 4.6.3
 優化(LLVM) 451
41.2.3非優化的Xcode 4.6.3(LLVM)
 以及Keil 6/2013 451
41.3 MIPS 451
41.4它是如何工作的452
41.4.1更多的理論453
41.5除法運算453
41.5.1變量#1 453
41.5.2變量#2 454
41.6練習題455
第42章字符串轉換成數字,
函數atoi() 456
42.1一個簡單的例子456
42.1.1 64位下的MSVC 2013優化456
42.1.2 64位下的GCC 4.9.1優化457
42.1.3 ARM模式下Keil 6/2013優化457
42.1.4 Thumb模式下Keil 6/2013
 優化458
42.1.5 ARM64下的GCC 4.9.1優化458
42.2一個略微高級的例子459
42.2.1 64位下的GCC 4.9.1優化460

 

 

 

 

 

 

 

 


42.2.2 ARM模式下的Keil6/2013
 優化461
42.3練習462
第43章Inline函數(聯機函數) 463
43.1字符串和內存操作函數464
43.1.1字符串比較函數strcmp() 464
43.1.2字符串長度函數strlen() 466
4 3.1.3字符串複製函數strcpy() 466
43.1.4內存設置函數memset() 467
43.1.5內存複製函數memcpy() 468
43.1.6內存對比函數memcmp() 470
43.1.7 IDA腳本471
第44章C99限制472
第45章無分支函數abs() 475
45.1 x64下的GCC 4.9.1優化475
45.2 ARM64下的GCC 4.9優化475
第46章參數個數可變函數477
46.1計算算術平均值477
46.1.1 cdecl調用規範477
46.1.2基於寄存器的調用規範478
46.2 vprintf()函數例子480

目錄

第47章字符串剪切482
47.1 x64下的MSVC 2013優化483
47.2 x64下採用編輯器GCC 4.9.1進行
 非優化操作484
47.3 x64下的GCC 4.9.1優化485
47.4 ARM64:非優化的
 GCC(Linaro)4.9 486
47.5 ARM64:優化GCC(Linaro)4.9 487
47.6 ARM: Keil 6/2013優化
 (ARM模式) 488
47.7 ARM: Keil 6/2013
 (Thumb模式)優化489
47.8 MIPS 489
第48章toupper()函數491
48.1 x64 491
48.1.1兩個比較操作491
48.1.2一個比較操作492
48.2 ARM 493
48.2.1 ARM64下的GCC 493
48.3總結494
第49章不正確的反彙編代碼4 95
49.1 x86環境下的,從一開始錯誤的
 反彙編495
49.2一些隨機數,怎麼看起來像
 反彙編指令?496
第50章混淆501
50.1字符串501
50.2可執行代碼501
50.2.1插入垃圾代碼501
50.2.2用多個指令組合代替原來的
 一個指令502
50.2.3始終執行或者從來不會執行的
 代碼502
50.2 .4把指令序列搞亂502
50.2.5使用間接指針503
50.3虛擬機以及偽代碼503
50.4一些其他的事情503
50.5練習503
50.5.1練習1 503
第51章C++ 504
51.1類504
51.1.1一個簡單的例子504
51.1.2類繼承510
51.1.3封裝513
51.1.4多重繼承515
51.1.5虛擬方法518
51.2 ostream流521
51.3引用522
51.4 STL(standard language file system)標準
 語言文件系統522
51.4.1 std ::string(字符串) 523
51.4.2 std::list函數529
51.4.3 std::vector標準向量539
51.4.4 std::map()和std::set() 547
第52章數組的負數偏移558
第53章16位的Windows程序561
53.1例子#1 561
53.2例子#2 561
53.3例子#3 562
53.4例子#4 563
53.5例子#5 566
53.6例子#6 569
53.6.1全局變量571
第四部分Java
第54章JAVA 575
54.1簡介575
54.2 返回一個值575
54.3簡單的計算函數579
54.4 JVM的內存模型582
54.5簡單的函數調用582
54.6調用函數beep()(蜂鳴器) 584
54.7線性同餘隨機數產生器(PRNG) 584
54.8條件跳轉586
54.9傳遞參數588
54.10位操作589
54.11循環590
54.12開關函數switch() 592
54.13數組593
54.13.1簡單的例子593
54.13.2數組元素求和594
54.13.3單一變量的主函數main()依然
是一個數組595
54.13.4預設初始值的的數組596
54.13.5可變參數函數597
54.13.6二維數組599
54.13.7三維數組600
54.13.8小結601
54.14字符串601
54.14.1第一個例子601
54.14.2第二個例子602
54.15例外603
54.16類606
54.17簡單的補丁608
54.17.1第一個例子608
54.17.2第二個例子610
54.18總結612
第五部分在代碼中發現重要而有趣的內容
第55章可執行文件的識別615
55.1 Microsoft Visual C++ 615
55.1.1命名規則615
55.2 GCC編譯器615
55.2.1命名規則615
55.2.2 Cygwin 615
55.2.3 MinGW 615
55. 3 Intel FORTRAN 615
55.4 Watcom以及OpenWatcom 616
55.4.1命名規則616
55.5 Borland編譯器616
55.5.1 Dephi編程語言616
55.6其他的已知DLL文件617
第56章Win32環境下與外部通信618
56.1在Windows API中最經常使用的函數618
56.2 tracer:解析指定模塊的所有函數618
第57章字符串620
57.1字符串620
57.1.1 C/C++中的字符串620
57.1.2 Borland Delphi 620
57.1.3 Unicode編碼620
57.1 .4 Base64 623
57.2錯誤/調試信息623
57.3可疑的魔數字符串623
第58章調用宏assert()
(中文稱為斷言) 624
第59章常數625
59.1魔數625
59.1.1動態主機配置協議( Dynamic Host Configuration Protocol,
 DHCP) 626
59.2尋找常數626
第60章發現正確的指令627
第61章可疑的代碼模型629
61.1 XOR異或指令629
61.2手寫彙編代碼629
第62章在跟踪程序的過程中使用魔數631
第63章其他的事情632
63.1一般的觀點632
63.2 C++ 632
63.3一些二進製文件模型632
63.4內存“快照”對比633
63.4.1 Window s註冊表633
63.4.2瞬變比較器Blink-comparator 633
第六部分操作系統相關
第64章參數的傳遞方法(調用規範) 637
64.1 cdecl [C Declaration的縮寫] 637
64.2 stdcall [Standard Call的縮寫] 637
64.2.1有可變參數個數的函數638
64.3 fastcall 638
64.3.1 GCC regparm 639
64.3.2 Watcom/OpenWatcom 639
64.4 thiscall 639
64.5 64位下的x86 639
64.5.1 Windows x64 639
64.5.2 64位下的Linux 642
64.6浮點數float和雙精度數double兩種
類型的返回值642
64.7修改參數643
64.8將指針作為一個函數的參數643
第65章線程本地存儲TLS 646
65.1重新審視線性同餘發生器646
65.1.1 Win32系統646
65.1.2 Linux系統650
第66章系統調用(syscall-s) 652
66.1 Linux 652
66.2 Windows 653
第67章Linux 654
67.1與位置無關的代碼654
67.1.1 Windows 656
67.2在Linux下的LD_PRELOAD 656
第68章Windows NT 660
68.1 CRT (Win32) 660
68.2 Win32 PE文件663
68.2.1術語664
68.2.2基地址664
68.2.3子系統664
68.2.4操作系統版本6 65
68.2.5段665
68.2.6再分配Relocations(relocs) 666
68.2.7輸出和輸入666
68.2.8資源669
68.2.9 .NET 669
68.2.10線程本地存儲(Thread Local
 Storage,TLS) 669
68.2. 11工具669
68.2.12更進一步669
68.3 Windows SEH 669
68.3.1讓我們暫時把MSVC
 放在一邊669
68.3.2讓我們重新回到MSVC 674
68.3.3 Windows x64 687
68.3.4關於SEH的更多信息691
68.4 Windows NT:關鍵段691
第七部分常用工具
第69章反彙編工具697
69.1 IDA 697
第70章調試工具698
70.1 tracer 698
70.2 OllyDbg 698
70.3 GDB 698
第71章系統調用的跟踪工具699
71.1 strace/ dtruss 699
第72章反編譯工具700
第73章其他工具701
第八部分更多範例
第74章修改任務管理器(Vista) 705
74.1使用LEA指令賦值707
第75章修改彩球遊戲709
第76章掃雷(Windows XP) 711
76.1練習題715
第77章人工反編譯與Z3 SMT
 求解法716
77.1人工反編譯716
77.2 Z3 SMT求解法719
第78章加密狗724
78.1例1:PowerPC平台的MacOS Classic
 程序724
78 . 2例2: SCO OpenServer 731
78.2.1解密錯誤信息739
78.3例3: MS-DOS 741
第79章“QR9”:魔方態加密模型747
第80章SAP 776
80.1關閉客戶端的網絡數據包壓縮功能776
80.2 SAP 6.0的密碼驗證函數787
第81章Oracle RDBMS 791
81.1 V$VERSION表791
81.2 X$KSMLRU表799
81.3 V$TIMER表800
第82章彙編指令與屏顯字符805
82.1 EICAR 805
第83章實例演示807
83.110 PRINT CHR$(205.5+RND(1));:
GOTO 10 807
83.1.1 Trixter的42字節程序807
83.1.2筆者對Trixter算法的改進:
27字節808
83.1.3從隨機地址讀取隨機數808
83.1.4其他809
83.2曼德博集合809
83.2.1理論810
83.2.2 demo程序814
83.2.3筆者的改進版816
第九部分文件分析
第84章基於XOR的文件加密821
84.1 Norton Guide:單字節XOR
加密實例821
84.1.1信息熵822
84.2 4字節XOR加密實例822
84.2.1練習題824
第85章Millenium遊戲的存檔文件825
第86章Oracle的.SYM文件829
第87章Oracle的.MSDB文件836
87.1本章總結839
第十部分其他
第88章np ad 843
第89章修改可執行文件845
89.1文本字符串845
89.2 x86指令845
第90章編譯器內部函數846
第91章編譯器的智能短板847
第92章OpenMP 848
92.1 MSVC 850
92.2 GCC 852
第93章安騰指令854
第94章8086的尋址方式857
第95章基本塊重排858
95.1 PGO的優化方式858
第十一部分推薦閱讀
第96章參考書籍863
96.1 Windows 863
96.2 C/C++ 863
96.3 x86/ x86-64 863
96.4 ARM 863
96.5加密學863
第97章博客864
97.1 Windows平台864
第98章其他內容865
第十二部分練習題
第99章初等難度練習869
99.1練習題1.4 869
第100章中等難度練習870
100.1練習題2.1 870
100.1.1 Optimizing MSVC 2010 x86 870
100.1.2 Optimizing MSVC 2012 x64 871
100.2練習題2.4 871
100.2.1 Optimizing MSVC 2010 871
100.2.2 GCC 4.4.1 872
100.2.3 Optimizing Keil
 (ARM mode ) 873
100.2.4 Optimizing Keil
 (Thumb mode) 874
100.2.5 Optimizing GCC 4.9.1
 (ARM64) 874
100.2.6 Optimizing GCC 4.4.5
 (MIPS) 875
100.3練習題2.6 876
100.3.1 Optimizing MSVC 20 10 876
100.3.2 Optimizing Keil
 (ARM mode) 877
100.3.3 Optimizing Keil
 (Thumb mode) 878
100.3.4 Optimizing GCC 4.9.1
 (ARM64) 878
100.3.5 Optimizing GCC 4.4.5 (MIPS) 879
100.4練習題2.13 879
100.4.1 Optimizing MSVC 2012 880
100.4.2 Keil(ARM mode) 880
100.4.3 Keil(Thumb mode) 880
100.4.4 Optimizing GCC 4.9.1
 (ARM64) 880
100.4.5 Optimizing GCC 4.4.5
 (MIPS) 881
100.5練習題2.14 881
100.5.1 MSVC 2012 881
100.5.2 Keil(ARM mode) 882
100.5.3 GCC 4.6.3 for Raspberry Pi
 (ARM mode) 882
100.5.4 Optimizing GCC 4.9.1
 (ARM64) 883
100.5.5 Optimizing GCC 4.4.5
 (MIPS) 884
100.6練習題2.15 885
100.6.1 Optimizing MSVC 2012 x64 886
100.6.2 Optimizing GCC 4.4.6 x64 888
100.6.3 Optimizing GCC 4.8.1 x86 889
100.6.4 Keil(ARM模式) :面向
 Cortex-R4F CPU的代碼890
100.6.5 Optimizing GCC 4.9.1
 (ARM64) 891
100.6.6 Optimizing GCC 4.4.5
 (MIPS) 892
100.7練習題2.16 893
100.7.1 Optimizing MSVC 2012 x64 893
100.7.2 Optimizing Keil
 (ARM mode) 893
100.7.3 Optimizing Keil
 (Thumb mode) 894
100.7.4 Non-optimizing GCC 4.9.1
 (ARM64) 894
100.7.5 Optimizing GCC 4.9.1
 (ARM64) 895
100.7.6 Non-optimizing GCC
 4.4.5(MIPS) 898
100.8練習題2.17 899
100.9練習題2.18 899
100.10練習題2.19 899
100.11練習題2.20 899
第101章高難度練習900
101.1練習題3.2 900
101.2練習題3.3 900
101.3練習題3.4 900
101.4練習題3.5 900
101.5練習題3.6 901
101.6練習題3.8 901
第102章Crackme/Keygenme 902
附錄A x86 903
A.1數據類型903
A.2通用寄存器903
A.2.1 RAX/EAX/AX/AL 903
A.2.2 RBX/EBX/BX/ BL 904
A.2.3 RCX/ECX/CX/CL 904
A.2.4 RDX/EDX/DX/DL 904
A.2.5 RSI/ESI/SI/SIL 904
A.2.6 RDI/EDI/DI/DIL 904
A.2.7 R8 /R8D/R8W/R8L 905
A.2.8 R9/R9D/R9W/R9L 905
A.2.9 R10/R10D/R10W/R10L 905
A.2.10 R11/R11D/R11W/R11L 905
A.2.11 R12/R12D/R12W/R12L 905
A.2.12 R13/R13D/R13W/R13L 905
A.2.13 R14/R14D/R14W/R14L 906
A.2.14 R15/R15D/R15W/R15L 906
A.2.15 RSP/ESP/SP/SPL 906
A.2.16 RBP/ EBP/BP/BPL 906
A.2.17 RIP/EIP/IP 906
A.2.18段地 寄存器
 CS/DS/ES/SS/FS/GS 907
A.2.19標識寄存器907
A.3 FPU寄存器907
A.3.1控製字寄存器(16位) 908
A.3.2狀態字寄存器(16位) 908
A.3.3標記字寄存器(16位) 909
A.4 SIMD寄存器909
A.4.1 MMX寄存器909
A.4.2 SSE與AVX寄存器909
A.5 FPU調試寄存器909
A.5.1 DR6規格910
A.5.2 DR7規格910
A.6指令911
A.6.1指令前綴911
A.6.2常見指令911
A.6.3不常用的彙編指令916
A.6.4 FPU指令921
A.6.5可屏顯的彙編指令(32位) 922
附錄B ARM 925
B.1術語925
B.2版本差異925
B.3 32位ARM(AArch32) 925
B.3.1通用寄存器925
B.3.2程序狀態寄存器/CPSR 925
B.3.3 VFP(浮點)和NEON寄存器926
B.4 64位ARM(AArch64) 926
B.4.1通用寄存器926
B.5指令927
B.5.1 Conditional codes速查表927
附錄C MIPS 928
C.1寄存器928
C.1.1通用寄存器GPR 928
C.1.2浮點寄存器FPR 928
C .2指令928
C.2.1轉移指令929
附錄D部分GCC庫函數930
附錄E部分MSVC庫函數931
附錄E部分MSVC庫函數931
附錄G 練習題答案935
G.1各章練習935

 


G.1.1 “棧” 935
G.1.2 “switch()/case/default”語句935
G.1.3練習題#1 935
G.1.4 “Loop”語句935
G. 1.5練習題#3 935
G.1.6練習題#4 935
G.1.7 C語言字符串處理練習題936
G.1.8算術指令替代936
G.1.9 FPU練習題936
G.1.10數組練習題936
G.1.11位操作練習題937
G.1.12結構體練習題939
G.1.13混淆技術練習題940
G.1.14除9練習題940
G.2初級練習題940
G.2.1練習題1.1 940
G.2.2練習題1.4 940
G .3中級練習題941
G.3.1練習題2.1 941
G.3.2練習題2.4 941
G.3.3練習題2.6 942
G.3.4練習題2.13 942
G.3.5練習題2.14 943
G.3.6練習題2.15 943
G. 3.7練習題2.16 943
G.3.8練習題2.17 943
G.3.9練習題2.18 943
G.3.10練習題2.19 943
G.3.11練習題2.20 943
G.4高難度練習題943
G.4.1練習題3.2 943
G. 4.2練習題3.3 943
G.4.3練習題3.4 944
G.4.4練習題3.5 944
G.4.5練習題3.6 944
G.4.6練習題3.8 944
G.5其他練習題944
G.5.1 “掃雷(Windows XP)944
參考文獻947

購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 877
絕版無法訂購

暢銷榜

客服中心

收藏

會員專區