Windows高級調試

《Windows高級調試》,是Mario Hewardt Daniel Pravat編著於2009年5月出版的書籍。

Windows高級調試

美)Mario Hewardt Daniel Pravat 著
聶雪軍 等譯
標準書號:978-7-111-26639-6
定價:79.00元
出版時間:2009年5月

圖書內容:

本書主要講解Windows高級調試思想和工具,並涉及一些高級調試主題。本書內容主要包括:工具簡介、調試器簡介、調試器揭密、符號檔案與源檔案的管理、棧記憶體破壞、堆記憶體破壞、安全、進程間通信、資源泄漏、同步、編寫定製的調試擴展、64位調試、事後調試、Windows Vista基礎以及應用程式驗證器的測試設定等。本書內容詳實、條理清楚。
本書適合Windows開發人員、Windows測試人員和Windows技術支持人員等參考。

圖書好評

“誰說你不能學習別人的經驗?本書就包含了豐富而翔實的信息,它們非常清晰地闡述了如何通過一種邏輯的方法來找出和修復程式中的問題。對於那些在Microsoft Windows平台上開發、測試和提供技術支持的人員來說,本書絕對是一本不可或缺的參考手冊。”
—Bob wilton,資深工程師
就職於Microsoft公司中CPR(Critical Problem Resolution)小組
“我有幸與本書的作者在超高要求系統(Extremely demanding System)領域共事了8年多的時間。本書包含了非常有價值的知識,我們曾經感嘆,要是在項目開始之前就知道這些知識該有多好—這位調試大師或許只有2月29號才會告訴你這些知識,因為他只有在這一天的下午才有空;只有親自去構建和調試那些複雜的系統項目而不是道聽途說,才能獲得這些寶貴的知識。
在大多數書籍中,一些高級主題總是作為‘留給讀者的練習’或者‘請參閱其他高級參考書’,而這些主題似乎從來就沒有出現過。本書屬於那些‘其他高級參考書’。要買就買兩本吧,因為你將經常要借一本給其他人。”
—Raymond McCollum,架構師
就職於Microsoft前沿安全產品(Forefront Security Product)部門
“由Microsoft的Mario和Daniel合著的這本書是一本非常棒的參考書,面向的讀者包括中級調試人員和高級調試人員。本書通過對一些示例進行深入講解來闡述如何調試各種錯綜複雜的問題,例如棧破壞和堆破壞等,這使得本書與目前市面上講解Win32軟體調試的眾多書籍相比顯得卓爾不群。本書的實用性非常高,包含了豐富的調試技巧和策略。”
—Kinshuman,開發主管
就職於Windows核心作業系統部門
“我非常高興地看到在這本書中包含了大量非常聰明的調試技巧。它不僅介紹了如何對付那些難以診斷的問題,而且還詳細解釋了在這些技術後面隱藏的底層機制。本書中介紹的實用方法對於人們理解一些關鍵的Windows領域是非常有幫助的。”
—Adrian Marinescu,軟體架構師
就職於Microsoft
本書詳細描述了如何調試和修復軟體中的各種問題。本書的內容是根據作者在跟蹤各種軟體問題時所積累的豐富經驗而提煉出來的。本書不僅給出了各種問題的代表性示例,而且還介紹了在分析這些問題時所使用的工具,以及這些工具的詳細使用說明。無論是軟體開發人員還是軟體測試人員,在理解了這些示例後都將受益匪淺。”
—Daniel Mihai,軟體設計工程師
就職於Microsoft開發人員生產率工具(Developer Productivity Tools)部門
“我編寫了WinDbg符號處理器、符號伺服器以及源檔案伺服器。即便如此,我仍然無法教會我妻子使用WinDbg。她認為這個工具非常難用,因此並不了解這個工具的強大之處。我買了這本書送給她,這樣她就可以知道如何使用WinDbg。本書中關於事後調試(postmortem Debugging)和記憶體破壞等方面的內容,有效地揭示了在程式出錯時的運行環境和作業系統的內部狀態。Mario和Daniel在調試領域積累了豐富經驗,因為他們經常被要求解決陌生程式中一些莫名其妙的問題。這也是具有工業強度的調試技術的真正意義所在。”
—Pat Styles
就職於Microsoft

目錄

譯者序
序言
前言
作者簡介
第一部分 概 述
第1章 調試工具簡介 1
1.1.泄漏診斷工具 1
1.2.Windows調試工具集 3
1.3.UMDH 4
1.4.Microsoft.應用程式驗證器 4
1.5.全局標誌 9
1.6.進程瀏覽器11
1.7.Windows驅動程式開發包 12
1.8.WIRESHARK 14
1.9.DebugDiag 15
1.10.小結 15
第2章.調試器簡介 16
2.1.調試器的基礎知識 16
2.1.1.調試器類型 17
2.1.2.調試器命令 18
2.1.3.調試器的配置19
2.1.4.通過核心態調試器重定向用戶
態調試器 24
2.1.5.是否使用KD 26
2.2.基本的調試任務26
2.2.1.鍵入調試命令27
2.2.2.解析調試器的提示信息27
2.2.3.配置和使用符號 29
2.2.4.使用源檔案 38
2.2.5.分析命令40
2.2.6.修改上下文的命令60
2.2.7.其他的輔助命令 67
2.2.8.示例68
2.3.遠程調試 70
2.3.1.Remote.exe 70
2.3.2.調試伺服器 71
2.3.3.進程伺服器與核心伺服器 73
2.3.4.遠程調試中的符號解析74
2.3.5.遠程調試中的原始碼解析 75
2.4.調試場景 75
2.4.1.調試非互動式進程(服務
或者COM伺服器) 76
2.4.2.在沒有核心態調試器的情況
下調試非互動式進程(服務
或者COM伺服器) 77
2.5.小結 77
第3章.調試器揭密 78
3.1.用戶態調試器的內幕78
3.1.1.作業系統對用戶態調試器的支持78
3.1.2.調試事件的順序 83
3.1.3.控制來自調試器的異常和事件 84
3.1.4.核心態調試器中的調試事件處理105
3.2.控制調試目標 106
3.2.1.斷點的工作原理 107
3.2.2.記憶體訪問斷點的工作原理 108
3.2.3.處理器跟蹤 109
3.2.4.實時調試中的執行緒狀態管理109
3.2.5.通過用戶態調試器來掛起執行緒 112
3.3.小結 113
第4章.符號檔案與源檔案的管理 114
4.1.調試符號的管理114
4.1.1.公有符號的生成 115
4.1.2.在符號庫中存儲符號 117
4.1.3.在HTTP伺服器上共享公有符號 119
4.2.源檔案的管理 120
4.2.1.收集源檔案信息 120
4.2.2.源檔案信息的使用122
4.2.3.不帶源檔案修訂控制的源檔案
伺服器 123
4.3.小結 125
第二部分.調 試 實 踐
第5章.記憶體破壞之一—棧 127
5.1.記憶體破壞的檢測過程128
5.1.1.步驟1:狀態分析 128
5.1.2.步驟2:原始碼分析 129
5.1.3.步驟3:使用記憶體破壞檢測工具 133
5.1.4.步驟4:調整原始碼 133
5.1.5.步驟5:定義迴避策略 133
5.2.棧記憶體破壞133
5.2.1.棧溢出 142
5.2.2.異步操作與棧頂指針 147
5.2.3.調用約定的不匹配154
5.2.4.迴避策略164
5.3.小結 166
第6章.記憶體破壞之二—堆 167
6.1.堆簡介167
6.1.1.前端分配器 168
6.1.2.後端分配器 169
6.2.堆破壞181
6.2.1.使用未初始化狀態181
6.2.2.堆的上溢與下溢 185
6.2.3.堆句柄的不匹配 195
6.2.4.重用已刪除的堆塊199
6.3.小結 205
第7章.安全 206
7.1.Windows安全概述 206
7.1.1.安全標識符 207
7.1.2.訪問控制列表208
7.1.3.安全描述符 209
7.1.4.訪問令牌211
7.2.安全信息的來源213
7.2.1.訪問令牌213
7.2.2.安全描述符 215
7.3.如何執行安全檢查 217
7.4.在客戶端/伺服器程式中傳播標識 218
7.4.1.遠程認證與安全支持提供者接口218
7.4.2.模擬級別220
7.5.系統邊界上的安全檢查 220
7.6.安全故障的分析221
7.6.1.本地安全故障221
7.6.2.延遲初始化中的安全問題 226
7.6.3.身份模擬的潛在安全問題 231
7.6.4.分散式COM錯誤 232
7.6.5.擴展命令!token的故障241
7.6.6.在Windows XP SP2上安裝了
某個程式後發生DCOM激活故障243
7.6.7.通過跟蹤工具來分析安全故障 247
7.7.小結 248
第8章.進程間通信 249
8.1.通信機制 249
8.2.本地通信分析 250
8.2.1.LPC的背景知識 251
8.2.2.調試LPC通信251
8.2.3.調試本地DCOM以及MSRPC通信 254
8.3.遠程通信分析 260
8.3.1.RPC故障測定狀態信息的使用 260
8.3.2.網路流量分析270
8.3.3.打破調用路徑275
8.4.一些其他的技術信息277
8.4.1.遠程認證277
8.4.2.RPC擴展錯誤信息 278
8.4.3.其他工具278
8.5.小結 279
第9章.資源泄漏 280
9.1.什麼是資源泄漏280
9.2.高層流程 280
9.2.1.步驟1:找出潛在的資源泄漏 281
9.2.2.步驟2:什麼東西正在泄漏 282
9.2.3.步驟3:初步分析 282
9.2.4.步驟4:資源泄漏檢測工具 282
9.2.5.步驟5:制定迴避策略 283
9.3.資源泄漏的可重現性283
9.4.句柄泄漏 284
9.4.1.存在泄漏的程式 285
9.4.2.步驟1和步驟2:它是不是一個
句柄泄漏 286
9.4.3.步驟3:初始分析 287
9.4.4.更複雜的程式290
9.4.5.步驟4:利用泄漏檢測工具 292
9.4.6.句柄注入與!htrace 298
9.4.7.步驟5:為句柄泄漏制定迴避策略 300
9.5.記憶體泄漏 301
9.5.1.一個簡單的記憶體泄漏 301
9.5.2.步驟1和步驟2:是否存在泄漏,
以及泄漏的是什麼資源 302
9.5.3.步驟3:使用記憶體檢測工具 303
9.5.4.步驟4:迴避策略 322
9.6.小結 322
第10章.同步 323
10.1.同步的基礎知識 323
10.1.1.事件 323
10.1.2.臨界區 325
10.1.3.互斥體 329
10.1.4.信號量 330
10.2.高層流程 331
10.2.1.步驟1:識別問題的徵兆 331
10.2.2.步驟2:轉儲所有執行緒331
10.2.3.步驟3:分析執行緒中的同步問題332
10.2.4.步驟4:修復問題334
10.2.5.步驟5:制定迴避策略334
10.3.同步情況 334
10.3.1.死鎖 334
10.3.2.第1種孤立臨界區情況—異常 338
10.3.3.第2種孤立臨界區情況—執行緒
結束 343
10.3.4.DllMain函式的注意事項 347
10.3.5.鎖競爭 353
10.3.6.管理臨界區 358
10.4.小結 361
第三部分.高 級 主 題
第11章.編寫定製的調試擴展363
11.1.調試擴展簡介 363
11.2.調試擴展示例 365
11.2.1.調試擴展模型 369
11.2.2.調試擴展示例的需求 371
11.2.3.頭檔案和代碼組織 372
11.2.4.調試擴展的初始化 374
11.2.5.調試會話狀態的變化 379
11.2.6.KnownStructOutput 379
11.2.7.退出調試擴展 379
11.2.8.Help命令的實現 380
11.2.9.dumptree命令的實現 381
11.2.10.KnownStructOutput函式的實現 384
11.2.11.取消命令的實現387
11.2.12.版本 389
11.2.13.調試擴展的構建389
11.3.小結 390
第12章.64位調試 391
12.1.Microsoft 64位系統 391
12.1.1.作業系統簡介 392
12.1.2.在WOW64中運行的32位程式 393
12.2.Windows x64帶來的變化395
12.2.1.第1章—調試工具簡介 396
12.2.2.第2章—調試器簡介 397
12.2.3.第3章—調試器揭密 407
12.2.4.第5章—記憶體破壞之一—棧 411
12.2.5.第6章—記憶體破壞之二—堆 411
12.2.6.第7章—安全 412
12.2.7.第8章—進程間通信 413
12.2.8.第11章—編寫定製的調試擴展414
12.3.小結 414
第13章.事後調試 415
13.1.轉儲檔案基礎 415
13.1.1.通過調試器來生成轉儲檔案 417
13.1.2.通過ADPlus來生成轉儲檔案 420
13.1.3.核心態轉儲檔案的創建 421
13.2.轉儲檔案的使用 423
13.2.1.轉儲檔案的分析:訪問違例 424
13.2.2.轉儲檔案的分析:句柄泄漏 425
13.3.Windows錯誤報告 429
13.3.1.Dr.Watson 429
13.3.2.Windows錯誤報告的系統架構 434
13.4.企業錯誤報告 446
13.4.1.設定企業錯誤報告 447
13.4.2.通過企業錯誤報告來報告錯誤 449
13.5.小結 451
第14章.功能強大的工具452
14.1.調試診斷工具 452
14.1.1.分析記憶體泄漏或者句柄泄漏 453
14.1.2.編寫定製的分析腳本 455
14.2.擴展命令!analyze 457
14.2.1.故障程式 457
14.2.2.分析結果 458
14.2.3.故障的跟進人員 462
14.3.小結 463
第15章.Windows Vista基礎 464
15.1.第1章—調試工具簡介 464
15.2.第2章—調試器簡介 465
15.2.1.用戶訪問控制的副作用 465
15.2.2.啟用核心態調試器 467
15.2.3.地址空間布局的隨機化 468
15.3.第6章—記憶體破壞之二—堆 469
15.4.第7章—安全性 473
15.4.1.用戶訪問控制 474
15.4.2.調試器中的UAC 475
15.4.3.註冊表和檔案虛擬化 479
15.5.第8章—進程間通信 481
15.6.第9章—資源泄漏 482
15.7.第10章—同步482
15.7.1.輕量讀寫鎖 482
15.7.2.條件變數 483
15.7.3.單次初始化 484
15.7.4.增強執行緒池 484
15.8.第11章—編寫定製的調試擴展 484
15.9.第13章—事後調試485
15.10.小結487
附錄A.應用程式驗證器的測試設定488

相關詞條

熱門詞條

聯絡我們