內容介紹
Windows環境下32位彙編語言是一種全新的程式語言。它使用與C++語言相同的API接口,不僅可以開發出大型的軟體,而且是了解作業系統運行細節的最佳方式。本書從編寫應用程式的角度,從“Hello,World!”這個簡單的例子開始到編寫多執行緒、註冊表和網路通信等複雜的程式,通過70多個實例逐步深入Windows環境下32位彙編語言編程的方方面面。
作者羅雲彬擁有10餘年彙編語言編程經驗,本書是作者多年來編程工作的總結,適合於欲通過Windows環境下32彙編語言編寫Windows程式的讀者。
作者介紹
羅雲彬,高級工程師,現從事移動網際網路軟體項目管理、軟體架構設計工作。在軟體工程、大數據套用等方面有豐富的經驗。對分散式資料庫及傳統關係型資料庫的開發和套用有深入的研究,是國內為數不多的OCM證書獲得者之一。作為主要完成人,曾獲得國家科技進步二等獎1項,省部級科學技術一等、三等獎各1項。作者在Windows作業系統下的套用軟體編程方面有豐富的經驗,自1990年開始即使用彙編語言編寫程式,是Windows作業系統流行後國內最早研究Win32彙編編程的程式設計師之一,曾在1998年創建了專門探討彙編編程的網站,發表過大量關於彙編編程的文章和教程,經典作品《Windows環境下32位彙編語言程式設計》連續10年暢銷。
作品目錄
基礎篇第1章背景知識 1
1.1Win32的軟硬體平台 1
1.1.180x86系列處理器簡史 1
1.1.2Windows的歷史 3
1.1.3Win32平台的背後——Wintel聯盟 5
1.2Windows的特色 6
1.3必須了解的基礎知識 7
1.3.180x86處理器的工作模式 7
1.3.2Windows的記憶體管理 9
1.3.3Windows的特權保護 17
第2章準備編程環境 21
2.1Win32執行檔的開發過程 21
2.2編譯器和連結器 23
2.2.1MASM系列 23
2.2.2TASM系列 27
2.2.3其他編譯器 28
2.2.4MASM,TASM還是NASM 29
2.2.5我們的選擇——MASM32 SDK軟體包 30
2.3創建資源 32
2.3.1資源編譯器的使用 32
2.3.2所見即所得的資源編輯器 32
2.4make工具的用法 34
2.4.1make工具是什麼 34
2.4.2nmake的用法 35
2.4.3描述檔案的語法 36
2.5獲取資料 40
2.5.1Windows資料的來源 40
2.5.2Intel處理器資料 42
2.6構建編程環境 42
2.6.1IDE還是命令行 43
2.6.2本書推薦的工作環境 43
2.6.3嘗試編譯第一個程式 45
第3章使用MASM 47
3.1Win32彙編源程式的結構 47
3.1.1模式定義 49
3.1.2段的定義 51
3.1.3程式結束和程式入口 54
3.1.4注釋和換行 54
3.2調用API 55
3.2.1API是什麼 55
3.2.2調用API 56
3.2.3API參數中的等值定義 61
3.3標號、變數和數據結構 63
3.3.1標號 63
3.3.2全局變數 65
3.3.3局部變數 66
3.3.4數據結構 69
3.3.5變數的使用 71
3.4使用子程式 75
3.4.1子程式的定義 76
3.4.2參數傳遞和堆疊平衡 77
3.5高級語法 79
3.5.1條件測試語句 80
3.5.2分支語句 81
3.5.3循環語句 83
3.6代碼風格 85
3.6.1變數和函式的命名 86
3.6.2代碼的書寫格式 88
3.6.3代碼的組織 89
初級篇
第4章第一個視窗程式 90
4.1開始了解視窗 90
4.1.1視窗是什麼 90
4.1.2視窗界面 91
4.1.3視窗程式是怎么工作的 92
4.2分析視窗程式 99
4.2.1模組和句柄 99
4.2.2創建視窗 101
4.2.3訊息循環 108
4.2.4視窗過程 110
4.3視窗間的通信 115
4.3.1視窗間的訊息互發 115
4.3.2在視窗間傳遞數據 119
4.3.3SendMessage和PostMessage函式的區別 119
第5章使用資源 121
5.1選單和加速鍵 121
5.1.1選單和加速鍵的組成 121
5.1.2選單和加速鍵的資源定義 122
5.1.3使用選單和加速鍵 128
5.2圖示和游標 140
5.2.1圖示和游標的資源定義 141
5.2.2使用圖示和游標 141
5.3點陣圖 145
5.3.1點陣圖簡介 145
5.3.2在資源中定義點陣圖 146
5.4對話框 147
5.4.1對話框簡介 147
5.4.2對話框的資源定義 149
5.4.3使用對話框 151
5.4.4在對話框中使用子視窗控制項 154
5.5字元串資源 177
5.6版本信息資源 178
5.6.1版本信息資源的定義 179
5.6.2在程式中檢測版本信息 181
5.7二進制資源和自定義資源 183
5.7.1使用二進制資源 183
5.7.2使用自定義資源 184
第6章定時器和Windows時間 185
6.1定時器 185
6.1.1定時器簡介 185
6.1.2定時器的使用方法 186
6.2Windows時間 190
6.2.1Windows時間的獲取和設定 190
6.2.2計算時間間隔 191
第7章圖形操作 193
7.1GDI原理 193
7.1.1GDI程式的結構 194
7.1.2設備環境 197
7.1.3色彩和坐標 203
7.2繪製圖形 205
7.2.1畫筆和畫刷 212
7.2.2繪製像素點 216
7.2.3繪製圖形 216
7.2.4繪圖模式 221
7.3創建和使用點陣圖 222
7.3.1一個使用點陣圖的時鐘例子 222
7.3.2創建和使用點陣圖 232
7.3.3使用設備無關點陣圖 233
7.4塊傳送操作 235
7.4.1塊傳送方式 236
7.4.2塊傳送函式 237
7.5區域和路徑 241
7.5.1使用區域 241
7.5.2使用路徑 243
界面篇
第8章通用對話框 245
8.1通用對話框簡介 245
8.2使用通用對話框 252
8.2.1 “打開”檔案和“保存”檔案對話框 252
8.2.2字型選擇對話框 254
8.2.3 “顏色”選擇對話框 256
8.2.4 “查找”和“替換”文本對話框 257
8.2.5 “頁面設定”對話框 260
8.2.6 “瀏覽目錄”對話框 261
第9章通用控制項 262
9.1通用控制項簡介 262
9.1.1通用控制項的分類 262
9.1.2使用通用控制項 263
9.2使用狀態欄 268
9.2.1創建狀態欄 273
9.2.2狀態欄的控制訊息 274
9.2.3在狀態欄上顯示選單提示信息 276
9.3使用工具列 277
9.3.1創建工具列 284
9.3.2工具列的控制訊息 287
9.3.3工具列的通知訊息 290
9.4使用Richedit控制項 294
9.4.1創建Richedit控制項 305
9.4.2Richedit控制項的控制訊息 307
9.4.3Richedit控制項的通知訊息 317
9.5視窗的子類化 318
9.5.1什麼是視窗的子類化 318
9.5.2視窗子類化的實現 319
9.6控制項的超類化 325
9.6.1什麼是控制項的超類化 325
9.6.2控制項超類化的實現 325
系統篇
第10章記憶體管理和檔案操作 330
10.1記憶體管理 330
10.1.1記憶體管理基礎 330
10.1.2記憶體的當前狀態 331
10.1.3標準記憶體管理函式 333
10.1.4堆管理函式 338
10.1.5虛擬記憶體管理函式 343
10.1.6其他記憶體管理函式 347
10.2檔案操作 348
10.2.1Windows的檔案I/O 348
10.2.2創建和讀寫檔案 350
10.2.3查找檔案 360
10.2.4檔案屬性 368
10.2.5其他檔案操作 369
10.3驅動器和目錄 371
10.3.1邏輯驅動器操作 372
10.3.2目錄操作 375
10.4記憶體映射檔案 377
10.4.1記憶體映射檔案簡介 377
10.4.2使用記憶體映射檔案 379
第11章動態程式庫和鉤子 388
11.1動態程式庫 388
11.1.1動態程式庫的概念 388
11.1.2編寫動態程式庫 389
11.1.3使用動態程式庫 395
11.1.4動態程式庫中的數據共享 404
11.1.5在VC++中使用動態程式庫 405
11.2Windows鉤子 408
11.2.1什麼是Windows鉤子 408
11.2.2遠程鉤子的安裝和使用 410
11.2.3日誌記錄鉤子 418
第12章多執行緒 422
12.1進程和執行緒 422
12.2多執行緒編程 423
12.2.1一個單執行緒的“問題程式” 423
12.2.2多執行緒的解決方法 427
12.2.3與執行緒有關的函式 431
12.3使用事件對象控制執行緒 435
12.3.1事件 436
12.3.2等待事件 437
12.3.3進一步改進計數程式 439
12.4執行緒間的同步 441
12.4.1產生同步問題的原因 441
12.4.2各種用於執行緒間同步的對象 446
第13章過程控制 454
13.1環境變數和命令行參數 454
13.1.1環境變數 454
13.1.2命令行參數 457
13.2執行執行檔 462
13.2.1方法一:Shell調用 462
13.2.2方法二:創建進程 464
13.3進程調試 473
13.3.1獲取運行中的進程句柄 473
13.3.2讀寫進程的地址空間 480
13.3.3調試API的使用 484
13.4進程的隱藏 494
13.4.1在Windows 9x中隱藏進程 494
13.4.2Windows NT中的遠程執行緒 495
第14章異常處理 508
14.1異常處理的用途 508
14.2使用篩選器處理異常 509
14.2.1註冊回調函式 509
14.2.2異常處理回調函式 511
14.3使用SEH處理異常 515
14.3.1註冊回調函式 516
14.3.2異常處理回調函式 518
14.3.3SEH鏈和異常的傳遞 521
14.3.4展開操作(Unwinding) 523
套用篇
第15章註冊表和INI檔案 527
15.1註冊表和INI檔案簡介 527
15.2INI檔案的操作 528
15.2.1INI檔案的結構 528
15.2.2管理鍵值 529
15.2.3管理小節 537
15.2.4使用不同的INI檔案 538
15.3對註冊表的操作 539
15.3.1註冊表的結構 539
15.3.2管理子鍵 541
15.3.3管理鍵值 552
15.3.4子鍵和鍵值的枚舉 553
15.3.5註冊表套用舉例 557
第16章WinSock接口和網路編程 560
16.1Windows Socket接口簡介 561
16.2Windows Socket接口的使用 564
16.2.1IP位址的轉換 564
16.2.2套接字 568
16.2.3網路應用程式的一般工作流程 571
16.2.4監聽、發起連線和接收連線 574
16.2.5數據的收發 577
16.2.6一個最簡單的TCP服務端程式 580
16.3TCP應用程式的設計 586
16.3.1通信協定和工作執行緒的設計 587
16.3.2TCP聊天室例子——伺服器端 596
16.3.3TCP聊天室例子——客戶端 604
16.3.4以非阻塞方式工作的TCP聊天室客戶端 611
16.3.5其他常用函式 622
第17章PE檔案 626
17.1PE檔案的結構 626
17.1.1概論 626
17.1.2DOS檔案頭和DOS塊 627
17.1.3PE檔案頭(NT檔案頭) 629
17.1.4節表和節 634
17.2導入表 649
17.2.1導入表簡介 649
17.2.2導入表的結構 651
17.2.3查看PE檔案導入表舉例 654
17.3導出表 657
17.3.1導出表的結構 657
17.3.2查看PE檔案導出表舉例 660
17.4資源 663
17.4.1資源簡介 663
17.4.2資源的組織方式 664
17.4.3查看PE檔案中的資源列表舉例 668
17.5重定位表 672
17.5.1重定位表的結構 673
17.5.2查看PE檔案的重定位表舉例 675
17.6套用實例 677
17.6.1動態獲取API入口地址 677
17.6.2在PE檔案上添加執行代碼 684
第18章ODBC資料庫編程 694
18.1基礎知識 694
18.1.1資料庫接口的發展歷史 694
18.1.2SQL語言 697
18.1.3ODBC程式的流程 699
18.2連線資料庫 700
18.2.1連線和斷開資料庫 700
18.2.2連線字元串 706
18.3數據的管理 709
18.3.1執行SQL語句 709
18.3.2執行結果的處理 714
18.3.3獲取結果集中的數據 716
18.3.4事務處理 721
18.4資料庫操作的例子 723
18.4.1結果集處理模組 724
18.4.2例子的原始碼 729
參考文獻 740
附錄A、B、C(見本書配套光碟)