匯編語言與逆向技術
王志、李旭昇、過辰楷、鄧琮弋
相關主題
商品描述
目錄大綱
目錄
第1章基本概念1
1.1歡迎來到匯編語言的世界1
1.1.1一些問題2
1.1.2匯編語言應用程序4
本節習題5
1.2虛擬機的概念5
1.2.1虛擬機與電腦的層次結構6
1.2.2匯編編譯器的歷史7
本節習題7
1.3數據的表示方法8
1.3.1二進制數8
1.3.2二進制加法9
1.3.3整數存儲的尺寸10
1.3.4十六進制數10
1.3.5有符號整數11
1.3.6字符的存儲14
本節習題16
1.4布爾運算17
本節習題19
1.5本章小結19
第2章IA32處理器體系結構21
2.1基本概念21
2.1.1微機的基本結構21
2.1.2指令執行的周期23
2.1.3內存的讀取26
2.1.4程序是如何運行的27
本節習題29
2.2IA32處理器的體系結構30
2.2.1操作模式30
2.2.2基本執行環境312.2.3浮點單元34
2.2.4Intel微處理器的歷史34
本節習題36
2.3IA32的內存管理37
2.3.1實地址模式37
2.3.2保護模式38
本節習題41
2.4IA32微機的構成41
2.4.1主板41
2.4.2視頻輸出43
2.4.3存儲器43
2.4.4輸入輸出接口44
本節習題45
2.5輸入輸出系統45
本節習題47
2.6本章小結48
匯編語言與逆向技術目錄
第3章匯編語言基礎49
3.1匯編語言的基本元素49
3.1.1整數常量49
3.1.2整數表達式50
3.1.3實數常量50
3.1.4字符常量51
3.1.5字符串常量51
3.1.6保留字51
3.1.7標識符52
3.1.8偽指令52
3.1.9指令53
3.1.10NOP(空操作)指令55
本節習題55
3.2例子: 整數相加減56
3.2.1AddSub程序的另一個版本57
3.2.2程序模板58
本節習題59
3.3匯編、鏈接和運行程序59
本節習題61
3.4定義數據62
3.4.1內部數據類型62
3.4.2數據定義語句63
3.4.3定義BYTE和SBYTE數據63
3.4.4定義WORD和SWORD數據65
3.4.5定義DWORD和SDWORD數據65
3.4.6定義QWORD數據66
3.4.7定義TBYTE數據66
3.4.8定義實數66
3.4.9小端字節序67
3.4.10為AddSub程序添加變量67
3.4.11未初始化數據的聲明68
本節習題69
3.5符號常量69
3.5.1等號偽指令69
3.5.2計算數組和字符串的大小70
3.5.3EQU偽指令71
3.5.4TEXTEQU偽指令72
本節習題72
3.6本章小結73
第4章數據傳送、尋址和算術運算74
4.1數據傳送指令74
4.1.1操作數類型74
4.1.2MOV指令75
4.1.3MOVZX、MOVSX指令77
4.1.4LAHF、SAHF指令78
4.1.5XCHG指令79
本節習題79
4.2簡單算術運算80
4.2.1INC、DEC指令80
4.2.2ADD指令81
4.2.3SUB指令81
4.2.4NEG指令82
4.2.5高級語言的簡單匯編實現82
4.2.6算術運算與標志位82
本節習題85
4.3偽指令和操作符86
4.3.1ALIGN偽指令86
4.3.2LABEL偽指令86
4.3.3OFFSET操作符87
4.3.4PTR操作符87
4.3.5TYPE操作符88
4.3.6LENGTHOF操作符88
4.3.7SIZEOF操作符88
本節習題88
4.4循環語句90
4.4.1JMP指令90
4.4.2LOOP指令90
4.4.3使用匯編來實現循環程序91
本節習題92
4.5內存操作數與尋址方式93
4.5.1直接偏移操作數93
4.5.2間接操作數94
4.5.3變址操作數95
本節習題95
4.6本章小結96
第5章過程98
5.1程序鏈接與鏈接庫98
5.1.1鏈接庫98
5.1.2常見鏈接庫100
本節習題103
5.2堆棧機制103
5.2.1運行時棧103
5.2.2PUSH、POP指令104
本節習題107
5.3過程的定義和使用107
5.3.1過程的概念107
5.3.2過程聲明偽指令108
5.3.3過程調用與返回指令109
5.3.4流程圖111
5.3.5寄存器的恢復和保持111
本節習題112
5.4匯編程序實例講解113
5.5本章小結116
第6章條件處理指令及程序結構117
6.1狀態標志和位操作類指令117
6.1.1CPU的狀態標志117
6.1.2邏輯運算指令119
6.1.3測試指令TEST122
6.1.4比較指令CMP123
本節習題123
6.2順序程序結構123
6.3分支程序結構124
6.3.1無條件轉移指令124
6.3.2條件轉移指令127
6.3.3單分支結構131
6.3.4雙分支結構132
6.3.5多分支結構133
本節習題133
6.4循環程序結構134
6.4.1循環指令135
6.4.2計數控制循環136
6.4.3條件控制循環137
6.4.4多重循環137
本節習題138
6.5本章小結139
第7章華為鯤鵬處理器體系結構140
7.1服務器處理器141
7.1.1服務器體系結構141
7.1.2服務器處理器並行組織結構141
本節習題143
7.2處理器體系結構143
7.2.1Intel處理器體系結構143
7.2.2ARM處理器體系結構144
7.2.3華為鯤鵬處理器146
本節習題147
7.3基於ARMv8的處理器體系結構147
7.3.1執行狀態148
7.3.2數據類型148
7.3.3異常等級與安全模型149
7.3.4寄存器150
7.3.5異常處理153
7.3.6中斷154
本節習題156
7.4本章小結156
第8章華為鯤鵬處理器匯編編程157
8.1ARM尋址方式157
8.1.1立即數尋址157
8.1.2寄存器尋址158
8.1.3寄存器間接尋址158
8.1.4基址尋址158
8.1.5多寄存器尋址159
8.1.6堆棧尋址160
8.1.7PC相對尋址160
8.1.8寄存器移位尋址160
本節習題161
8.2ARM指令集161
8.2.1GNU ARM匯編語言語法格式161
8.2.2跳轉指令162
8.2.3異常產生指令166
8.2.4系統寄存器指令168
8.2.5數據處理指令168
8.2.6Load/Store內存訪問指令176
8.2.7SIMD指令177
本節習題178
8.3ARM偽指令179
8.3.1數據定義偽操作179
8.3.2匯編控制偽操作181
8.3.3其他偽操作182
8.3.4偽指令183
本節習題184
8.4ARM匯編語言的程序結構185
8.4.1順序結構185
8.4.2分支結構186
8.4.3循環結構188
8.4.4子程序189
本節習題189
8.5ARM的編譯與調試工具190
8.5.1GCC編譯器套件190
8.5.2匯編程序示例——Hello World191
本節習題193
8.6本章小結193第9章PE文件結構194
9.1可執行文件194
9.1.1Windows系統可執行文件194
9.1.2Linux系統可執行文件198
本節習題199
9.2PE的基本概念199
9.2.1基地址200
9.2.2虛擬地址201
9.2.3相對虛擬地址201
9.2.4文件偏移地址201
本節習題202
9.3DOS部分202
9.3.1DOS MZ頭202
9.3.2DOS存根203
本節習題203
9.4PE文件頭204
9.4.1Signature字段204
9.4.2IMAGE_FILE_HEADER結構204
9.4.3IMAGE_OPTIONAL_HEADER結構206
9.4.4目錄209
本節習題210
9.5節211
9.5.1節表211
9.5.2常見的節213
9.5.3節的對齊值214
9.5.4文件偏移與虛擬內存地址轉換214
本節習題215
9.6導入表216
9.6.1導入函數的調用216
9.6.2IMAGE_IMPORT_DESCRIPTOR結構216
9.6.3PE裝載器218
9.6.4導入表實例分析218
本節習題222
9.7導出表222
9.7.1IMAGE_EXPORT_DESCRIPTOR結構223
9.7.2導出表實例分析224
本節習題226
9.8本章小結226第10章C語言程序逆向分析227
10.1函數與堆棧227
10.1.1函數調用與返回227
10.1.2堆棧229
10.1.3函數的參數229
10.1.4棧幀與函數的局部變量230
10.1.5全局變量與局部變量232
本節習題233
10.2調用約定233
本節習題235
10.3數組和結構體235
10.3.1數組235
10.3.2結構體237
本節習題239
10.4常見的控制流結構239
10.4.1分支結構239
10.4.2循環結構240
10.4.3switchcase結構242
本節習題245
10.5其他事項245
10.5.1識別main函數245
10.5.2不同優化級別生成的代碼246
本節習題248
10.6本章小結248
第11章靜態逆向分析技術249
11.1初次使用Binary Ninja249
本節習題252
11.2導航與瀏覽代碼252
11.2.1雙擊導航252
11.2.2符號列表253
11.2.3導航對話框253
11.2.4字符串與交叉引用253
11.2.5導入函數與導出函數255
11.2.6搜索255
11.2.7前進與後退256
本節習題257
11.3使用Binary Ninja的主視圖257
本節習題260
11.4分析與標註代碼260
11.4.1重命名函數或變量260
11.4.2修改函數或變量的類型261
11.4.3添加註釋261
11.4.4添加書簽或者標簽261
11.4.5設置高亮顯示的顏色262
11.4.6撤銷與重做262
本節習題263
11.5使用類型263
本節習題266
11.6修補代碼267
本節習題268
11.7實例講解269
11.7.1實例一269
11.7.2實例二271
本節習題272
11.8本章小結273
第12章動態調試分析技術274
12.1x64dbg調試器入門274
12.1.1x64dbg的獲取與安裝275
12.1.2初次使用x64dbg調試275
本節習題277
12.2x64dbg的主界面277
12.2.1代碼窗口278
12.2.2寄存器窗口279
12.2.3內存窗口279
12.2.4堆棧窗口與調用堆棧280
12.2.5內存佈局窗口281
12.2.6不同窗口間的跳轉與導航281
12.2.7其他窗口282
本節習題282
12.3基本調試操作282
12.3.1由調試器啟動調試對象282
12.3.2附加到已經在運行的進程282
12.3.3恢復調試對象執行283
12.3.4結束調試284
本節習題284
12.4使用斷點284
12.4.1軟件斷點284
12.4.2硬件斷點286
12.4.3管理斷點287
12.4.4條件斷點288
12.4.5軟件斷點的原理289
本節習題290
12.5修改被調試進程的狀態290
12.5.1修改寄存器的值290
12.5.2修改數據291
12.5.3修改代碼292
12.5.4修改下一條指令292
本節習題293
12.6反調試及其應對293
本節習題294
12.7實例講解295
12.7.1實例一295
12.7.2實例二297
本節習題299
12.8本章小結300
第13章軟件知識產權保護技術301
13.1序列號保護301
13.1.1序列號保護的實現原理301
13.1.2序列號保護的案例分析303
本節習題304
13.2警告彈窗304
13.2.1警告彈窗的實現原理304
13.2.2警告窗口的案例分析307
本節習題310
13.3時間限制310
13.3.1時間限制的實現原理310
13.3.2時間限制的案例分析312
本節習題316
13.4功能限制316
13.4.1功能限制的實現原理317
13.4.2功能限制的案例分析318
本節習題320
13.5KeyFile保護321
13.5.1KeyFile保護的實現原理321
13.5.2KeyFile保護的案例分析323
本節習題325
13.6本章小結326