“天書(shū)夜讀”是通向軟件底層技術(shù)的一個(gè)大門與捷徑。這里涉及的每個(gè)方面的技術(shù),無(wú)論是CPU底層架構(gòu)與機(jī)器指令、匯編語(yǔ)言、Windows內(nèi)核編程、軟件逆向工程還是軟件調(diào)試,無(wú)一不是入門艱難的技術(shù),許多技術(shù)者在開(kāi)始時(shí)就被汗牛充棟的龐雜資料嚇倒。用一條簡(jiǎn)潔明確的線,把它們串聯(lián)起來(lái),使讀者可以從最基礎(chǔ)入門,循序漸進(jìn)地接觸到高深的技術(shù),并應(yīng)用于實(shí)際。避免一開(kāi)始就面對(duì)浩瀚的文檔資料而茫然不知如何入手,也不知如何學(xué)以致用,這就是我寫(xiě)這本書(shū)的目的。
從貌似天書(shū)的匯編代碼中,一探Windows底層的核心實(shí)現(xiàn)。.
在開(kāi)發(fā)中出現(xiàn)的問(wèn)題,能從Windows自身找到答案!...
本書(shū)從基本的Windows程序與匯編指令出發(fā),深入淺出地講解了Windows內(nèi)核的編程、調(diào)試、閱讀,以及自行探索的方法。讀者在使用C/C++ 開(kāi)發(fā)Windows程序的基礎(chǔ)上,將熟練掌握匯編和C語(yǔ)言的應(yīng)用,深入了解Windows底層,并掌握閱讀Windows內(nèi)核的基本方法,以及 Windows內(nèi)核的基本編程方法。
本書(shū)正文的內(nèi)容是從讀者很可能已經(jīng)遺忘的匯編語(yǔ)言的基礎(chǔ)指令開(kāi)始,介紹C語(yǔ)言與匯編指令的關(guān)系,為閱讀用C語(yǔ)言編寫(xiě)的Windows內(nèi)核做準(zhǔn)備。然后開(kāi)始講解Windows內(nèi)核的C語(yǔ)言編程的基礎(chǔ)。讓讀者能熟悉使用C語(yǔ)言開(kāi)發(fā)Windows內(nèi)核程序。接著指導(dǎo)讀者進(jìn)行內(nèi)核的開(kāi)發(fā)和調(diào)試環(huán)境的配置,并進(jìn)行了一系列的嘗試:閱讀Windows內(nèi)核的部分實(shí)現(xiàn)代碼,并嘗試自己去實(shí)現(xiàn)它。與此同時(shí),產(chǎn)生了修改已有內(nèi)核的需求。于是接下來(lái)介紹了機(jī)器碼指令和匯編語(yǔ)言的關(guān)系,以及能夠解讀機(jī)器碼的反匯編引擎,并以此為基礎(chǔ),介紹了進(jìn)行Windows內(nèi)核Hook開(kāi)發(fā)的方法。之后是Windows內(nèi)核Hook的一個(gè)利用:我們舉出了一個(gè)防止病毒木馬感染的安全防毒軟件的例子。在此之后,簡(jiǎn)要介紹了更深層次的病毒與安全的對(duì)抗:Rootkit與HIPS。最后是一些防止代碼與技術(shù)被閱讀者“偷學(xué)”的章節(jié)。
相信讀者讀完此書(shū),無(wú)論是對(duì)匯編語(yǔ)言的掌握,還是Windows編程的技術(shù),以及對(duì)Windows系統(tǒng)的了解和調(diào)試程序、查找修正故障的能力,都會(huì)得到一個(gè)飛躍式的提高。...
入手篇 熟悉匯編
第1章 匯編指令與C語(yǔ)言
1.1 上機(jī)建立第一個(gè)工程
1.1.1 用Visual Studio創(chuàng)建工程
1.1.2 用Visual Studio查看匯編代碼
1.2 簡(jiǎn)要復(fù)習(xí)常用的匯編指令
1.2.1 堆棧相關(guān)指令
1.2.2 數(shù)據(jù)傳送指令
1.2.3 跳轉(zhuǎn)與比較指令
1.3 C函數(shù)的參數(shù)傳遞過(guò)程
第2章 C語(yǔ)言的流程和處理
2.1 C語(yǔ)言的循環(huán)反匯編
2.1.1 for循環(huán)
2.1.2 do循環(huán)
2.1.3 while循環(huán)
2.2 C語(yǔ)言判斷與分支的反匯編
2.2.1 if-else判斷分支
2.2.2 switch-case判斷分支
2.3 C語(yǔ)言的數(shù)組與結(jié)構(gòu)
2.4 C語(yǔ)言的共用體和枚舉類型
第3章 練習(xí)反匯編C語(yǔ)言程序
3.1 算法的反匯編
3.1.1 算法反匯編代碼分析
3.1.2 算法反匯編閱讀技巧
3.2 發(fā)行版的反匯編
3.3 匯編反C語(yǔ)言練習(xí)
基礎(chǔ)篇 內(nèi)核編程
第4章 內(nèi)核字符串與內(nèi)存
4.1 字符串的處理
4.1.1 使用字符串結(jié)構(gòu)
4.1.2 字符串的初始化
4.1.3 字符串的拷貝
4.1.4 字符串的連接
4.1.5 字符串的打印
4.2 內(nèi)存與鏈表
4.2.1 內(nèi)存的分配與釋放
4.2.2 使用LIST_ENTRY
4.2.3 使用長(zhǎng)長(zhǎng)整型數(shù)據(jù)
4.2.4 使用自選鎖
第5章 文件與注冊(cè)表操作
5.1 文件操作
5.1.1 使用OBJECT_ATTRIBUTES
5.1.2 打開(kāi)和關(guān)閉文件
5.1.3 文件讀/寫(xiě)操作
5.2 注冊(cè)表操作
5.2.1 注冊(cè)表鍵的打開(kāi)
5.2.2 注冊(cè)表值的讀
5.2.3 注冊(cè)表值的寫(xiě)
......