第1章 基礎知識
1.1 保護模式概述
1.1.1 保護模式的淵源
1.1.2 什么是保護模式
1.2 分段機制和段描述符表
1.3 段頁式尋址機制
1.4 保護模式下的異常
1.5 保護模式下的寄存器和新增指令集
1.6 介紹Soft-ICE for Windows
第2章 Windows內核數據結構
2.1 Windows可執(zhí)行文件首部的格式
2.1.1 MS-DOS文件頭
2.1.2 MS-Windows文件頭
2.1.3 Windows代碼段中的重定位信息
2.1.4 Windows可執(zhí)行文件實例剖析
2.2 Windows的模塊表
2.2.1 模塊表
2.2.2 Windows模塊表實例剖析——KERNEL的模塊表
2.3 Windows的默認數據段
2.4 Windows的任務數據庫(TDB)
2.4.1 任務數據庫TDB
2.4.2 任務數據庫實例剖析——progman的TDB
2.4.3 PSP與PDB
2.4.4 進程數據塊實例剖析
2.5 WND結構及INTWNDCLASS結構
2.6 Windows中的重表——THHOOK
第3章 Windows內核引導過程
3.1 Windows啟動過程的回顧
3.2 KERNEL初始化過程概述
3.3 KRNL386.EXE的STUB程序
3.4 KRNL386的STUB程序清單
3.5 BOOTSTRAP的執(zhí)行過程
3.5.1 BOOTSTRAP I的執(zhí)行過程
3.5.2 BOOTSTRAP II的執(zhí)行過程
3.5.3 初始化全局堆——globalInit()
3.5.4 創(chuàng)建模塊表
3.6 BOOTSTRAP源程序清單精選
第4章 Windows的啟動和終止
4.1 Windows內核初始化的流程
4.1.1 Windows內核初始化的實現流程
4.1.2 程序段0117:D182-D19F:
4.1.3 程序段0117:D1AB-D212:
4.1.4 Windows怎樣滿足同時打開很多文件的需要?
4.1.5 0117:D2CB-D2E6程序段
4.1.6 0117:d764-d769程序段
4.2 Windows內核初始化程序清單
4.3 退出Windows內核的過程
4.3.1 ExitWindows()例程
4.3.2 ExitKernel()例程
第5章 Windows內存管理機制
5.1 Windows內存管理概述
5.2 內存管理中的數據結構
5.2.1 BurgerMaster段
5.2.2 全局堆信息結構與全局場
5.2.3 局部堆與局部場
5.3 全局堆中內存塊的組織形式
5.3.1 空閑鏈表
5.3.2 LRU鏈表
5.4 全局內存分配標記的含義
5.5 Windows的內存管理函數
5.5.1 全局堆內存管理函數
5.5.2 局部堆內存管理函數
5.6 GlobalAlloc()的剖析
5.6.1 CheckAllocValidty()
5.6.2 SubCheckAllocValidty()
5.6.3 SubGAlloc()
5.6.4 AllocMemory()
5.6.5 FindFreeLow()
5.6.6 AllocFreeLow()
5.6.7 MoveBlockNearBy()
5.6.8 CheckBlockNearBy()
5.6.9 MoveFreeLow()
5.6.10 StorageBackward()
5.6.11 MarkSwapPage()
5.6.12 CheckFreeBorder()
5.6.13 ModiGlobalArena()
5.6.14 InsertIdleLink()
5.6.15 SubInsert()
5.6.16 BreakIdleLink()
5.6.17 UnifyFreeBlock()
5.6.18 GrowHeap()
5.6.19 GetDPMIInfo()
5.6.20 FreeDPMIBlock()
5.6.21 UnlinkWin386Block()
第6章 Windows模塊裝載機制
6.1 模塊的基本概念
6.2 實例和任務的概念
6.3 模塊裝載函數——LoadModule()
6.4 模塊裝載函數的重要輔助例程
6.4.1 檢測指定模塊是否已經裝入內存的函數——CheckLoadingModule()
6.4.2 為已裝入模塊創(chuàng)建新實例的函數——CreateNewInstance()
6.4.3 文件打開函數——OpenModuleFile()
6.4.4 模塊表創(chuàng)建函數——CreateMDB()
6.4.5 模塊標記檢測函數——CHeckModuleFlag()
6.4.6 TDB和DLL引用鏈表段的創(chuàng)建函數——CreateTask()
6.4.7 任務數據庫的創(chuàng)建函數——CreateTDB()
6.4.8 任務模塊PDB的初始化函數——InitPDB_1()
6.4.9 模塊內存分配函數——DoModuleAlloc()
6.4.10 段內存分配函數——AllocModuleSet()
6.4.11 引用DLL的裝入函數——LoadImportDll()
6.4.12 段裝載函數——LoadModuleSeg()
6.4.13 運行已裝載模塊的函數——RunNewMOdule()
6.4.14 模塊初始化函數——InitModule()
6.4.15 庫模塊的初始化函數——InitDllModule()
6.4.16 應用程序模塊的初始化函數——InitAppModule()
6.4.17 任務啟動函數——StartNewTask()
6.5 段的裝載
6.5.1 段裝載函數——LoadSegment()
6.5.2 內存分配函數——FarMyAlloc()
6.5.3 段數據復制函數——CopySegToDesc()
6.5.4 重復段創(chuàng)建函數——CreateIteratedSeg()
6.5.5 前序代碼修改函數——PatchCodeHandle()
6.6 被裝載模塊的重定位
6.6.1 System.drv中段選擇符的重定位
6.6.2 Keyboard.drv中函數指針(段:偏移)的重定位
6.6.3 System.drv中函數指針(段:偏移)的重定位
6.6.4 System.drv中常量函數的重定位
6.7 緩存文件名柄對照表
6.8 模塊的卸載過程
6.8.1 模塊刪除函數——DeleteModule()
6.9 自裝載Windows的應用程序
6.9.1 為什么要引入自裝載問題
6.9.2 如何創(chuàng)建一個自裝載程序
6.9.3 裝載函數
6.9.4 段重載函數——LoadAppSeg()
6.9.5 硬件復位函數——EXITPROC()
6.9.6 內存分配函數——MyAlloc()
6.9.7 所有者設置函數——Set()wner()
6.9.8 入口點獲取函數——EntryAddrProc()
第7章 Windows任務的啟動和關閉
7.1 Windows任務的啟動代碼
7.2 Windows中任務的啟動
7.2.1 任務初始化函數I——InitTask()
7.2.2 任務啟動函數II——WaitEvent()
7.2.3 任務啟動函數III——InitApp()
7.2.4 TSR裝載程序——LoadTSRApp()
7.3 任務的入口函數——WinMain()
7.4 Windows中任務的終止
7.4.1 任務終止函數——ExitTask()
第8章 Windows動態(tài)鏈接機制
8.1 動態(tài)鏈接機制
8.1.1 動態(tài)鏈接的概述
8.1.2 動態(tài)鏈接庫與應用程序的比較
8.1.3 動態(tài)鏈接與靜態(tài)鏈接的比較
8.1.4 動態(tài)鏈接庫的實例剖析
8.2 動態(tài)鏈接庫的啟動代碼
8.3 動態(tài)鏈接庫函數
8.3.1 庫裝載和卸載函數
8.3.2 庫的初始化函數
8.3.3 庫中引出函數入口點的獲取函數
8.3.4 庫清理函數WEP()
8.4 動態(tài)鏈接庫引用次數的設置
8.4.1 IncExeUsage()
8.4.2 DecExeUsage()
8.5 Windows的前置代碼(Prologs)和后續(xù)代碼(Epilogs)
8.5.1 概述
8.5.2 應用程序的前置代碼和后續(xù)代碼
8.5.3 應用程序的靈巧回調(Smart CallBack)
8.5.4 DLL的前置代碼和后續(xù)代碼
8.5.5 實模式下的前置代碼
8.5.6 保護模式下的前置代碼
8.5.7 過程實例塊的創(chuàng)建和解放函數
第9章 Windows任務調度機制
9.1 多任務機制
9.2 搶先式調度策略
9.3 非搶先式調度策略
9.3.1 事件
9.3.2 優(yōu)先級
9.3.3 控制權的釋放
9.4 源程序說明
9.4.1 WaitEvent()
9.4.2 Directedyield()
9.4.3 Yield()
9.4.4 UserYIeld()
9.4.5 OldYIeld()
9.4.6 PostEvent()
9.4.7 SetPriority()
9.4.8 Reschedule()
第10章 Windows消息驅動機制
10.1 Windows的消息結構
10.2 Windows的任務隊列
10.3 Windows的系統(tǒng)隊列
10.4 消息隊列的創(chuàng)建
10.4.1 系統(tǒng)隊列的創(chuàng)建——CreateSystemQueue
10.4.2 任務隊列的創(chuàng)建——CreateTaskQueue()
10.4.3 消息隊列的創(chuàng)建——CreateQueue()
10.5 Windows的消息類型
10.5.1 鍵盤消息——Qs_Key
10.5.2 鼠標消息——Qs_Mouse
10.5.3 時鐘消息——Qs_Timer
10.5.4 屏幕重繪消息——Qs_Paint
10.5.5 傳遞消息——Qs_PostMsg
10.5.6 發(fā)送消息——Qs_SendMsg
10.6 Windows的消息值
10.7 Windows的消息函數
10.7.1 消息標記獲取函數
10.7.2 消息發(fā)送函數1
10.7.3 消息應答函數
10.7.4 消息獲取函數
10.7.5 消息傳遞函數
10.7.6 消息發(fā)送函數2
附錄 DPMI功能調用
參考文獻