匯編語言與逆向技術

王志、李旭昇、過辰楷、鄧琮弋

  • 出版商: 清華大學
  • 出版日期: 2025-02-01
  • 定價: $390
  • 售價: 8.5$332
  • 語言: 簡體中文
  • ISBN: 7302681007
  • ISBN-13: 9787302681007
  • 下單後立即進貨 (約4週~6週)

  • 匯編語言與逆向技術-preview-1
  • 匯編語言與逆向技術-preview-2
  • 匯編語言與逆向技術-preview-3
匯編語言與逆向技術-preview-1

相關主題

商品描述

"匯編語言是一種面向機器的底層編程語言。本書將電腦匯編語言與軟件逆向分析技術交叉融合,從匯編語言的角度介紹處理器、操作系統和應用軟件的底層設計,通過逆向分析技術進一步理解系統和程序的底層運行機制,以軟件知識產權保護場景的案例分析展示匯編語言與逆向技術在信息安全領域的重要性。本書介紹了目前普遍使用的Intel IA32處理器及其使用的x86匯編語言,也介紹了華為鯤鵬處理器及其使用的功能更強大的ARM匯編語言。逆向技術部分,本書使用了更加先進且免費的Binary Ninja靜態逆向分析平臺和x64dbg動態逆向分析平臺。 本書主要面向高校信息安全、網絡空間安全等相關專業的師生和從事信息安全工作的技術人員。通過學習,讀者可以更深入地瞭解電腦處理器和操作系統,理解高級語言編程的底層實現,進一步掌握靜態和動態的二進制代碼逆向分析方法,從案例分析中認識到匯編語言和逆向技術對於軟件知識產權保護的重要性,為進一步學習“軟件漏洞挖掘”“電腦病毒分析”等信息安全課程打下堅實的基礎。 "

目錄大綱

目錄

第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章IA32處理器體系結構21

2.1基本概念21

2.1.1微機的基本結構21

2.1.2指令執行的周期23

2.1.3內存的讀取26

2.1.4程序是如何運行的27

本節習題29

2.2IA32處理器的體系結構30

2.2.1操作模式30

2.2.2基本執行環境312.2.3浮點單元34

2.2.4Intel微處理器的歷史34

本節習題36

2.3IA32的內存管理37

2.3.1實地址模式37

2.3.2保護模式38

本節習題41

2.4IA32微機的構成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.3switchcase結構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