Windows編程調試技術內幕Windows編程調試技術內幕

Windows編程調試技術內幕Windows編程調試技術內幕

《Windows編程調試技術內幕》是2021年人民郵電出版社出版的圖書,作者是塔里克·索拉米(Tarik Soulami)。本書簡述了 Windows 開發框架和作業系統中的層。在用調試和跟蹤工具發現數據意義時,這些基礎知識非常重要。

基本介紹

  • 中文名:Windows編程調試技術內幕
  • 作者:塔里克·索拉米(Tarik Soulami)
  • 出版社:人民郵電出版社
  • ISBN:9787115501486 
內容簡介,圖書目錄,作者簡介,

內容簡介

這是一本介紹 Windows 編程調試技術的書。本書簡述了 Windows 開發框架和作業系統中的層。在用調試和跟蹤工具發現數據意義時,這些基礎知識非常重要。本書還談到了“調試的樂趣和好處”,描述了 Windows 作業系統中調試器的架構,並介紹了一些可擴展的策略,以幫助你充分利用 Windows 的調試器。本書還展示了 WinDbg 調試器的用法,通過分析代碼和作業系統之間的重要相互作用來幫助你更好地了解系統核心。*後,本書就“觀察和分析軟體的行為”展開討論,介紹了 Windows 事件跟蹤(ETW)技術,並說明了在調試和分析調查中利用 ETW 技術的方法。本書適合程式設計師、安全人員、軟體測試人員閱讀,也可以作為大專院校相關專業的教學用書和機構的培訓用書。

圖書目錄

第 一部分 背景
第 1章 Windows軟體開發 3
1.1 Windows發展過程 3
1.1.1 Windows版本歷史 3
1.1.2 支持的CPU架構 4
1.1.3 Windows版本特性 5
1.1.4 Windows服務術語 5
1.2 Windows架構 6
1.2.1 核心態與用戶態 6
1.2.2 用戶態系統進程 7
1.2.3 用戶態套用進程 8
1.2.4 低級別的Windows通信機制 11
1.3 Windows開發人員接口 13
1.3.1 開發人員文檔資源 13
1.3.2 WDM、KMDF和 UMDF 14
1.3.3 NTDLL和USER32層 14
1.3.4 Win32 API層 15
1.3.5 COM層 15
1.3.6 CLR(.NET)層 20
1.4 微軟開發工具 22
1.4.1 Windows驅動程式開發工具包(WDK) 23
1.4.2 Windows軟體開發工具包 23
1.5 小結 23
第二部分 調試的樂趣和好處
第 2章 入門 27
2.1 調試工具介紹 27
2.1.1 獲取Windows調試器軟體包 27
2.1.2 獲取Visual Studio調試器 31
2.1.3 WinDbg和Visual Studio調試器對比 31
2.2 用戶態調試 32
2.2.1 使用WinDbg調試你的第 一個程式 32
2.2.2 列舉局部變數和函式參數值 39
2.2.3 WinDbg中的源碼級調試 43
2.2.4 符號檔案、伺服器和本地快取 44
2.2.5 WinDbg符號離線快取 45
2.2.6 WinDbg中符號解析問題的故障排除 46
2.2.7 名稱修飾注意事項 46
2.2.8 獲取WinDbg命令的幫助 48
2.3 核心態調試 49
2.3.1 你的第 一個(實時)核心態調試會話 50
2.3.2 使用物理機建立一個核心態調試環境 55
2.3.3 使用虛擬機設定核心態調試環境 60
2.3.4 診斷主機/目標機通信問題 62
2.3.5 理解KD中斷序列 63
2.3.6 在核心態調試器中控制目標機 64
2.3.7 在核心態調試器中設定代碼斷點 66
2.3.8 獲取WinDbg核心態調試命令的幫助 68
2.4 小結 68
第3章 Windows調試器是如何工作的 70
3.1 用戶態調試 70
3.1.1 架構概述 70
3.1.2 Win32調試API 71
3.1.3 調試事件和異常 72
3.1.4 中斷序列 75
3.1.5 設定代碼斷點 76
3.1.6 觀察WinDbg中的代碼斷點插入 77
3.2 核心態調試 81
3.2.1 架構概述 81
3.2.2 設定代碼斷點 82
3.2.3 單步執行目標 82
3.2.4 切換當前進程上下文 83
3.3 託管代碼調試 84
3.3.1 架構概述 85
3.3.2 SOS Windows調試器擴展 87
3.4 腳本調試 92
3.4.1 架構概述 92
3.4.2 在Visual Studio中調試腳本 93
3.5 遠程調試 95
3.5.1 架構概述 95
3.5.2 WinDbg中的遠程調試 96
3.5.3 Visual Studio中的遠程調試 99
3.6 小結 101
第4章 事後調試 102
4.1 實時調試 102
4.1.1 你的第 一個實時調試實驗 102
4.1.2 實時調試是如何工作的 105
4.1.3 使用Visual Studio作為實時調試器 108
4.1.4 運行時斷言和實時調試 113
4.1.5 會話0中實時調試 113
4.2 轉儲調試 114
4.2.1 用戶態轉儲檔案自動生成 114
4.2.2 使用WinDbg調試器分析崩潰轉儲檔案 117
4.2.3 使用Visual Studio分析崩潰轉儲檔案 123
4.2.4 手動生成轉儲檔案 124
4.2.5 “時間旅行”調試 125
4.2.6 核心態事後調試 126
4.3 小結 128
第5章 基礎擴展 130
5.1 非侵入式調試 130
5.2 數據斷點 132
5.2.1 深度分析用戶態和核心態數據斷點 133
5.2.2 清除核心態數據斷點 135
5.2.3 執行數據斷點與代碼斷點 136
5.2.4 用戶態調試器數據斷點操作:C++全局對象和C運行時庫 137
5.2.5 核心態調試器數據斷點操作:等待進程退出 139
5.2.6 高級例子:誰在修改註冊表值 141
5.3 調試器腳本 145
5.3.1 使用調試器腳本重放命令 145
5.3.2 調試器偽暫存器 146
5.3.3 在調試器腳本中解析C++模板名稱 148
5.3.4 腳本實踐:在核心調試器中列舉Windows服務進程 149
5.4 WOW64調試 150
5.4.1 WOW64環境 150
5.4.2 WOW64進程調試 151
5.5 Windows調試鉤子(GFLAGS) 154
5.5.1 系統級與進程相關的NT全局標誌 154
5.5.2 GFLAGS工具 155
5.5.3 調試器擴展命令!gflag 157
5.5.4 用戶態調試器對NT全局標誌值的影響 159
5.5.5 映像檔案執行選項鉤子 159
5.6 小結 159
第6章 代碼分析工具 161
6.1 靜態代碼分析 161
6.1.1 使用VC++靜態代碼分析捕獲你的第 一個崩潰錯誤 161
6.1.2 SAL注釋 164
6.1.3 其他靜態分析工具 167
6.2 運行時代碼分析 169
6.2.1 使用應用程式驗證器工具捕獲你的第 一個錯誤 170
6.2.2 幕後花絮:作業系統中支持的校驗器 172
6.2.3 調試擴展命令!avrf 176
6.2.4 應用程式校驗器作為質量保證工具 179
6.3 小結 179
第7章 專家調試技巧 181
7.1 基本技巧 181
7.1.1 等待一個調試器附加到目標 182
7.1.2 載入DLL時中斷 184
7.1.3 調試進程啟動 188
7.1.4 調試子進程 194
7.2 更多有用的技巧 203
7.2.1 調試錯誤代碼故障 203
7.2.2 在第 一次異常通知時中斷 209
7.2.3 凍結執行緒 210
7.3 核心態調試技巧 212
7.3.1 在用戶態進程創建時中斷 212
7.3.2 調試用戶態進程啟動 215
7.3.3 載入DLL時中斷 216
7.3.4 未處理SEH異常時中斷 217
7.3.5 凍結執行緒 218
7.4 小結 220
第8章 常見調試場景·第 1部分 222
8.1 調試非法訪問 222
8.1.1 理解記憶體非法訪問 222
8.1.2 調試擴展命令!analyze 223
8.2 調試堆破壞 225
8.2.1 調試本地堆破壞 225
8.2.2 調試託管(GC)堆破壞 233
8.3 調試棧破壞 241
8.3.1 基於棧的緩衝區溢出 242
8.3.2 在棧破壞分析中使用數據斷點 243
8.3.3 重構損壞棧的調用幀 244
8.4 調試棧溢出 246
8.4.1 理解棧溢出 246
8.4.2 調試命令kf 247
8.5 調試句柄泄露 248
8.5.1 句柄泄露例子 249
8.5.2 調試擴展命令!htrace 250
8.6 調試用戶態記憶體泄露 254
8.6.1 使用應用程式驗證器工具檢測資源泄露 254
8.6.2 使用UMDH工具分析記憶體泄露 257
8.6.3 擴展策略:棧跟蹤資料庫的自定義引用 260
8.7 調試核心態記憶體泄露 262
8.7.1 核心記憶體基礎知識 262
8.7.2 使用Pool Tagging調查核心態泄露 263
8.8 小結 266
第9章 常見調試場景·第 2部分 268
9.1 調試資源競爭 268
9.1.1 共享狀態一致性錯誤 269
9.1.2 共享狀態生命周期管理錯誤 273
9.1.3 DLL模組生命周期管理錯誤 281
9.2 調試死鎖 284
9.2.1 (鎖順序)Lock-Ordering死鎖 285
9.2.2 邏輯死鎖 288
9.3 調試訪問檢查問題 292
9.3.1 基本的NT安全模型 292
9.3.2 Windows Vista的改進 297
9.3.3 結束 300
9.4 小結 301
第 10章 調試系統內部機制 302
10.1 Windows控制台子系統 302
10.1.1 printf背後的魔力 302
10.1.2 Windows UI事件的處理 309
10.1.3 Ctrl+C信號的處理 309
10.2 系統調用剖析 314
10.2.1 用戶態一側的系統調用 315
10.2.2 轉換到核心態 317
10.2.3 核心態一側的系統調用 318
10.3 小結 319
第三部分 觀察和分析軟體的行為
第 11章 Xperf介紹 323
11.1 獲取Xperf 323
11.2 你的第 一個Xperf調查 327
11.2.1 制定一個調查策略 328
11.2.2 收集場景的ETW跟蹤 328
11.2.3 分析收集到的ETW跟蹤 329
11.3 Xperf的優點和局限性 339
11.4 小結 339
第 12章 ETW內幕 341
12.1 ETW架構 341
12.1.1 ETW設計原則 342
12.1.2 ETW組件 342
12.1.3 特殊的NT核心日誌記錄會話 343
12.1.4 使用Xperf 配置ETW會話 344
12.2 Windows系統現有的ETW檢測 347
12.2.1 Windows核心中的檢測 347
12.2.2 其他Windows組件中的檢測 350
12.3 理解ETW的Stack-Walk事件 355
12.3.1 啟用和查看核心提供者事件的棧跟蹤 355
12.3.2 啟用和查看用戶提供者事件的棧跟蹤 358
12.3.3 診斷ETW棧跟蹤問題 359
12.4 在你的代碼中添加ETW記錄 363
12.4.1 ETW事件剖析 364
12.4.2 使用ETW Win32 API記錄事件 367
12.5 在ETW中跟蹤引導過程 370
12.5.1 在引導過程中記錄核心提供者事件 371
12.5.2 在引導過程中記錄用戶提供者事件 373
12.6 小結 375
第 13章 常見的跟蹤場景 376
13.1 分析阻塞時間 376
13.1.1 ETW的CSwitch和ReadyThread事件 377
13.1.2 使用Visual Studio 2010實施等待分析 379
13.1.3 使用Xperf實施等待分析 384
13.2 分析記憶體使用 389
13.2.1 分析目標進程中高級別的記憶體使用 390
13.2.2 分析NT堆記憶體使用 391
13.2.3 分析GC堆(.NET)記憶體使用 395
13.3 跟蹤作為一個調試輔助 403
13.3.1 跟蹤錯誤代碼失敗 403
13.3.2 跟蹤系統內部機制 407
13.4 小結 413
附錄A WinDbg用戶態調試快速啟動 415
附錄B Windows核心態調試快速啟動 428

作者簡介

塔里克·索拉米(Tarik Soulami)是Windows基礎團隊首席開發主管,曾在微軟從事 過10餘年的系統級軟體設計和開發工作。加入Windows基礎團隊之前,他曾在通用語言運行平台(CLR)團隊工作,參與了微軟.NET框架早期版本的開發。

相關詞條

熱門詞條

聯絡我們