拍案惊奇——软件调试实战训练营暑期特别班(v2.1)
隨著軟件復(fù)雜度的不斷增加,軟件調(diào)試的難度越來越大。以調(diào)試器為核心的調(diào)試技術(shù)是征服軟件世界的一把利劍。要想成為軟件高手,認(rèn)真修煉軟件調(diào)試這門劍法是再多也不為過的。本訓(xùn)練營通過12個精選案例讓參與者在實戰(zhàn)中“事上磨練”,快速進階。這些案例都來自真實的軟件產(chǎn)品和項目,既有深度,又有廣度,覆蓋Windows和Linux兩大平臺,編程語言方面涉及C/C++和.Net等。涵蓋的技術(shù)包括交互式調(diào)試(用戶態(tài)和內(nèi)核調(diào)試),轉(zhuǎn)儲文件分析,逆向工程,反調(diào)試(加殼)與化解等。訓(xùn)練營由《軟件調(diào)試》和《格蠹匯編》的作者張銀奎(格蠹老雷)親任教練,現(xiàn)身說法,剖微窮深。
?
時間:2017年8月11日-8月13日(周五-周日)(三天兩晚封閉訓(xùn)練,挑燈論劍)
地點:廬山秀峰景區(qū)內(nèi)松雪樓(住)和中正行營(研習(xí))
形式:實戰(zhàn)演練、講解和討論點評
培訓(xùn)對象:在Windows或者Linux平臺上從事開發(fā)或測試的軟件工程師、項目帶頭人和技術(shù)經(jīng)理
主辦單位:高端調(diào)試網(wǎng)站、上海曜印網(wǎng)絡(luò)科技有限公司
?
熱身篇:雙劍合璧——WinDBG與GDB之理一分殊(上)(60分鐘)
概要:以GDB和GNU事業(yè)的開創(chuàng)者RichardStallman和NT內(nèi)核之父David Cutler的傳奇故事開場,這一部分將介紹GDB和WinDBG這兩大調(diào)試器的核心特征和關(guān)鍵用法,比較其異同。讓聽者在傳奇的故事和精彩的演示中快速掌握這兩把利劍的基本招式。
?
? ? ? ? ? ? ? ? ? ? ? ? ? ?
實戰(zhàn)篇:
戰(zhàn)役1:用戶態(tài)轉(zhuǎn)儲分析:堆損毀導(dǎo)致的隨機崩潰和掛死(90分鐘)
概述:這是一個因為軟件故障而導(dǎo)致外接鼠標(biāo)鍵盤無法工作的詭異問題,它與移動硬盤配套軟件的后臺服務(wù)有關(guān),但也與隱藏在Windows操作系統(tǒng)系統(tǒng)內(nèi)部函數(shù)中的一個代碼疏漏密不可分
工具和主要技能:WinDBG,用戶態(tài)轉(zhuǎn)儲文件分析,反匯編,從棧上觀察參數(shù),無源代碼調(diào)試(跟蹤第三方代碼)
編程語言:C/C++,.Net,匯編
知識點:棧,堆的布局,strcpy的實現(xiàn),rep movs,x86寄存器的約定用法,溢出,異常,CONTEXT和EXCEPTION_RECORD,DeviceIoControl
討論:寬松接口的副作用
?
戰(zhàn)役2:LINUX用戶態(tài)調(diào)試:后臺服務(wù)因段錯誤崩潰 (90分鐘)
概述:Linux下重要后臺服務(wù)(Daemon)隨機崩潰,深挖到底,竟然與C語言的規(guī)范有關(guān),讓你深刻認(rèn)識C與C++的一個大不同之處,感受著名的頭文件陷阱
工具和主要技能:GDB,GCC,map,dmesg,調(diào)試Linux應(yīng)用程序,反匯編,插入代碼JIT調(diào)試
編程語言:C、匯編
知識點:虛擬內(nèi)存,分頁機制,頁表,缺頁異常,段錯誤,空指針,AT&T匯編和Intel匯編,調(diào)用規(guī)約
討論:信任程序員,是耶非耶?
?
戰(zhàn)役3:Windows雙機內(nèi)核調(diào)試:應(yīng)用程序掛死之陷在內(nèi)核態(tài)(90分鐘)
概述:向Powerpoint粘貼文件時,它突然掛死,過錯卻不在它,而是與系統(tǒng)機制(DDE)有關(guān),不負(fù)責(zé)任的第三方服務(wù)軟件也是導(dǎo)致問題的關(guān)鍵因素
工具和主要技能:WinDBG,內(nèi)核調(diào)試,在內(nèi)核調(diào)試會話中調(diào)試應(yīng)用程序
編程語言:C++,.Net
知識點:剪貼板,DDE,OLE,系統(tǒng)調(diào)用,消息機制,Send與Post的區(qū)別,廣播消息,Win32K,服務(wù)程序,服務(wù)循環(huán)
討論:(軟件)協(xié)作思想的對與錯
?
戰(zhàn)役4:多線程調(diào)試:關(guān)鍵區(qū)死鎖和死循環(huán) (90分鐘)
概述:多個線程的首要問題是如何同步?做的不好有可能導(dǎo)致死循環(huán),也有能出現(xiàn)死鎖,本戰(zhàn)役對這兩種情況各舉一例,一個是DUMP,一個是活動目標(biāo)
工具和主要技能:WinDBG,多線程調(diào)試,觀察線程的執(zhí)行時間
編程語言:C/C++
知識點:線程和進程,管理線程和進程的數(shù)據(jù)結(jié)構(gòu),TEB,fs/gs段,volatile關(guān)鍵字,死循環(huán),臨界區(qū),!locks, !cs -l,CPU提供的同步設(shè)施,LOCK前綴,互鎖系列,intricins,同步方法之比較
討論:無鎖編程
?
戰(zhàn)役5:LINUX雙機內(nèi)核調(diào)試:與驅(qū)動程序間通信時的數(shù)據(jù)混亂 (90分鐘)
概述:應(yīng)用程序與驅(qū)動程序通信時,驅(qū)動程序總是收到錯誤的數(shù)據(jù),打印出來觀察,竟然是日志信息送給了驅(qū)動…
工具和主要技能:GDB,KGDB,Linux雙機內(nèi)核調(diào)試,printk,dmesg
編程語言:C
知識點:虛擬文件系統(tǒng),Linux驅(qū)動程序,sysfs,與應(yīng)用程序通信,標(biāo)準(zhǔn)文件
討論:句柄的隱患(多維度審視句柄)
?
戰(zhàn)役6:內(nèi)核轉(zhuǎn)儲分析:內(nèi)核態(tài)棧溢出和雙誤崩潰(90分鐘)
概述:嚴(yán)重的雙誤崩潰大多是因為棧枯竭導(dǎo)致的,棧怎么會用完呢?一位書友最先向我反應(yīng)了這個問題,后來在顯卡驅(qū)動中又多次遇到這個問題
工具和主要技能:WinDBG,系統(tǒng)崩潰轉(zhuǎn)儲分析
編程語言:C/C++
知識點:異常的分類,中斷處理,IDT表,雙誤,顯卡驅(qū)動,DPC,內(nèi)核態(tài)棧,操作系統(tǒng)的任務(wù)切換機制;CPU的硬件任務(wù)切換;內(nèi)核態(tài)棧溢出;任務(wù)狀態(tài)段TSS,內(nèi)核態(tài)棧溢出; CR2寄存器;CR3寄存器,GPU,顯卡驅(qū)動概要
討論:單一內(nèi)核和多內(nèi)核
?
溫故知新:雙劍合璧——WinDBG與GDB之理一分殊(下)(60分鐘)
概要:在前面實戰(zhàn)的基礎(chǔ)上,溫習(xí)和回顧GDB和WinDBG的關(guān)鍵用法,講解其中的原理,并加以深化和擴展,然后介紹兩大調(diào)試器的高級用法,特別是定制調(diào)試事件的原理和方法。
?
戰(zhàn)役7:內(nèi)核態(tài)轉(zhuǎn)儲分析:系統(tǒng)在DPC級別掛死和崩潰(90分鐘)
概述:如何在驅(qū)動程序中處理中斷請求是個比較敏感的問題,本講通過兩個真實案例理解IRQL的概念,以及系統(tǒng)在高IRQL掛死(system hang)或者崩潰(IRQL_NOT_LESS_OR_EQUAL)的調(diào)試方法
工具和主要技能:WinDBG,轉(zhuǎn)儲分析,手動觸發(fā)系統(tǒng)崩潰,根據(jù)反匯編結(jié)果產(chǎn)生C/C++代碼
編程語言:C/C++
知識點:DPC,IRQL,硬件資源分配,!arbiter,設(shè)備棧,中斷處理,USB的端口狀態(tài)寄存器
討論:延遲等待硬件的方法
?
戰(zhàn)役8:通過內(nèi)核調(diào)試會話調(diào)試用戶態(tài)問題:緩沖區(qū)溢出之系統(tǒng)服務(wù)崩潰(90分鐘)
概述:使用多種方法調(diào)試Win7系統(tǒng)中電源管理服務(wù)發(fā)生崩潰而導(dǎo)致系統(tǒng)反復(fù)重啟的問題,使用內(nèi)核調(diào)試解決復(fù)雜的用戶態(tài)問題,探討軟件的安全問題
工具和主要技能:WinDBG,內(nèi)核調(diào)試,JIT調(diào)試,使用內(nèi)核調(diào)試會話調(diào)試用戶態(tài)問題
編程語言:C/C++
知識點:棧緩沖區(qū)溢出;基于Cookie的溢出檢測;服務(wù)崩潰;未處理異常,異常的分發(fā)過程,JIT調(diào)試的原理,會話0,強制登出(logoff),fail fast,GCC的棧溢出保護
討論:安全開發(fā)和調(diào)試有關(guān)安全的問題
?
戰(zhàn)役9:堆調(diào)試:C++程序中的堆錯亂(60分鐘)
概述:以一個典型的因為字符串類使用不當(dāng)而導(dǎo)致的堆錯誤為例,深刻理解進程中的多個CRT堆,堆管理器的脆弱之處,字符串類分配內(nèi)存的方法,靜態(tài)鏈接和動態(tài)鏈接可能產(chǎn)生的影響,分享使用堆的最佳實踐,思考面向?qū)ο笤O(shè)計的基本問題
工具和主要技能:WinDBG,交互式調(diào)試,硬件斷點
編程語言:C/C++
知識點:堆,堆管理器,CRT,CRT的多個實例,靜態(tài)鏈接CRT和動態(tài)鏈接CRT,析構(gòu),字符串類,自動內(nèi)存分配
討論:公開數(shù)據(jù)成員的得與失
?
戰(zhàn)役10:在調(diào)試器下看glibc堆(90分鐘)(NEW)
概述:使用GDB等多種工具深度解析Linux下的用戶態(tài)堆和動態(tài)內(nèi)存分配的典型問題,包括多次釋放、溢出等,現(xiàn)場演練使用GDB跟蹤ptmalloc堆的技巧以及使用valgrind工具的方法。
工具和主要技能:GDB,valgrind,交互式調(diào)試,調(diào)試內(nèi)存有關(guān)的問題
編程語言:C/C++
知識點:內(nèi)存的多層管理,堆的結(jié)構(gòu),arena,堆塊,分配和釋放過程,valgrind工作原理
?
戰(zhàn)役11:托管程序調(diào)試:Windows Platform SDK安裝程序死循環(huán)(90分鐘)
概述:Windows7 Platform SDK安裝程序停滯不前,多次重試無果,上調(diào)試器發(fā)現(xiàn)是因為異常處理不當(dāng)而陷入死循環(huán)
工具和主要技能:WinDBG,使用WinDBG +SOS擴展分析.Net程序的轉(zhuǎn)儲文件,使用ildasm反匯編.Net程序
編程語言:C#, .Net
知識點:異常,try{}catch,try{}finally,動態(tài)語言,Dispose方法,方法表,屬性,托管異常
討論:函數(shù)的異常出口
?
戰(zhàn)役12:反調(diào)試與化解:Rootkit跟蹤之TDSS(90分鐘)(NEW)
概述:現(xiàn)場調(diào)試著名的根件(Rootkit)TDSS,介紹反調(diào)試的典型方法和原理,以及化解之道
工具和主要技能:WinDBG,IDA Pro,反匯編,交互式反匯編,Anti-Debug和應(yīng)對
編程語言:匯編語言
知識點:單步標(biāo)志,硬件斷點寄存器,異常處理器,反調(diào)試的一般方法,檢查調(diào)試器,隱藏調(diào)試器,記時法反跟蹤,內(nèi)存HASH檢測,倒車調(diào)用,花指令,隱藏模塊的方法(摘鏈大法),虛擬機,檢測在虛擬機中運行的方法,檢測VM之I/O端口,VMWare后門,VPC后門,SIDT方法,STR指令
?
?
講師介紹
張銀奎,微軟全球最有價值技術(shù)專家(MVP),同濟大學(xué)電子與信息工程學(xué)院特邀講師,前英特爾亞太研發(fā)有限公司軟件架構(gòu)師。《軟件調(diào)試》、《格蠹匯編》的作者,新版《十萬個為什么》電子分冊撰稿人之一,《程序員》雜志調(diào)試之劍欄目作者。1996年畢業(yè)于上海交通大學(xué)信息與控制工程系,在軟件產(chǎn)業(yè)工作20年,在多家跨國公司歷任開發(fā)工程師、軟件架構(gòu)師、開發(fā)經(jīng)理、項目經(jīng)理等職務(wù),對 IA-32 架構(gòu)、操作系統(tǒng)內(nèi)核、驅(qū)動程序、虛擬化技術(shù)、云計算、軟件調(diào)優(yōu)、尤其是軟件調(diào)試有較深入研究。從2005年開始公開講授“Windows內(nèi)核及高級調(diào)試”課程,曾在微軟的Webcast和各種技術(shù)會議上做過《Windows Vista內(nèi)核演進》、《調(diào)試之劍》(全球軟件戰(zhàn)役研究峰會)、《感受和思考調(diào)試器的威力》(CSDN SD2.0大會)、《Windows啟動過程》、《如何診斷和調(diào)試藍屏錯誤》、《Windows體系結(jié)構(gòu)——從操作系統(tǒng)的角度》(以上三個講座都是微軟“深入研究Windows內(nèi)部原理系列”的一部分)等。翻譯(合譯)作品有《現(xiàn)代x86匯編語言編程》、《21世紀(jì)機器人》、《觀止——微軟創(chuàng)建NT和未來的奪命狂奔》、《數(shù)據(jù)挖掘原理》、《機器學(xué)習(xí)》、《人工智能:復(fù)雜問題求解的結(jié)構(gòu)和策略》等。
??
?
附錄1:往屆研習(xí)班部分照片
附錄2:松雪樓及秀峰景區(qū)部分景觀
?
附錄3:報名與收費
以下所說費用包括:
§? 廬山秀峰景區(qū)門票
§? 研習(xí)班期間的旅游意外險
§? 包含研習(xí)材料的U盤一個
§? 研習(xí)班期間(8月11日上午至8月13日下午4:30)的住宿、餐飲和茶點
(不包括往返廬山的交通費用和以上費用之外的其它費用)
?
標(biāo)準(zhǔn)收費:5600元每人
優(yōu)惠條款:
1)同一單位6人同時報名,可免其中一人費用
2)7月30日前報名可以享受8折優(yōu)惠
3)在校學(xué)生、女生或者個人自費參加請聯(lián)系課程顧問詢問優(yōu)惠價格(視報名時間而不同)
?
報名或垂詢
1)聯(lián)系課程顧問:
a)????????Cindy Long,電話:13621638537,電子郵件:cindy.long@leshanting.cn
b)???????Lisa Zhang ,電話:13801874134,電子郵件:lisa.zhang@leshanting.cn
2)請掃描文末的二維碼,關(guān)注“格友”公眾號后,發(fā)送2017后便可以提交報名信息或者提問。
?
公司付款
收款單位:上海曜印網(wǎng)絡(luò)科技有限公司
銀行賬號:1001122409003035262
開戶行:中國工商銀行上海分行靜安新城支行
?
?
***********************************************************
正心誠意,格物致知,以人文情懷審視軟件,以軟件技術(shù)改變?nèi)松?/span>
歡迎關(guān)注格友公眾號
總結(jié)
以上是生活随笔為你收集整理的拍案惊奇——软件调试实战训练营暑期特别班(v2.1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: upset图形如何理解
- 下一篇: 我的世界局域网游戏环境搭建