《琢石成器》是2009年電子工業出版社出版的圖書,作者是羅雲彬。本書從編寫應用程式的角度,從“Hello,World!”這個簡單的例子開始到編寫多執行緒、註冊表和網路通信等複雜的程式,通過70多個實例逐步深入Win32彙編語言編程的方方面面。
基本介紹
- 作者:羅雲彬
- ISBN:9787121086632
- 頁數:756頁
- 定價:89.00元
- 出版社:電子工業出版社
- 出版時間:2009年6月
- 裝幀:平裝
- 叢書: 驅網核心技術叢書
內容介紹,作者介紹,作品目錄,
內容介紹
Windows環境下32位彙編語言是一種全新的程式語言。它使用與C++語言相同的API接口,不僅可以開發出大型的軟體,而且是了解作業系統運行細節的最佳方式。
本書作者羅雲彬擁有十餘年彙編語言編程經驗,是彙編編程網站的創辦者。本書是作者多年來編程工作的總結,適合於欲通過Win32彙編語言編寫Windows程式的讀者。
作者介紹
羅雲彬,軟體工程師,現從事軟體項目管理、軟體工程實施、資料庫套用等領域的工作,在Windows作業系統下的套用軟體編程方面有豐富的經驗,另外對Oracle資料庫的管理有深入的研究,是國內為數不多的OCM證書獲得者之一。
彙編語言編程是作者的一大愛好,作者自1990年開始即使用彙編語言編寫程式,是Windows作業系統流行後國內最早研究Win32彙編編程的程式設計師之一,在1998年創建了專門探討彙編編程的網站,曾發表過大量關於彙編編程的文章和網上教程,經典作品《Windows環境下32位彙編語言程式設計》連續8年暢銷。
作品目錄
目 錄
基礎篇
第1章 背景知識1
1.1 Win32的軟硬體平台1
1.1.1 80x86系列處理器簡史1
1.1.2 Windows的歷史3
1.1.3 Win32平台的背後--
1.1.3 Wintel聯盟5
1.2 Windows的特色6
1.3 必須了解的基礎知識7
1.3.1 80x86處理器的工作模式7
1.3.2 Windows的記憶體管理9
1.3.3 Windows的特權保護17
第2章 準備編程環境21
2.1 Win32執行檔的
2.1 開發過程21
2.2 編譯器和連結器23
2.2.1 MASM系列23
2.2.2 TASM系列27
2.2.3 其他編譯器28
2.2.4 MASM,TASM還是
2.2.4 NASM29
2.2.5 我們的選擇--MASM32
2.2.5 SDK軟體包30
2.3 創建資源31
2.3.1 資源編譯器的使用31
2.3.2 所見即所得的資源編輯器32
2.4 make工具的用法34
2.4.1 make工具是什麼34
2.4.2 nmake的用法35
2.4.3 描述檔案的語法36
2.5 獲取資料39
2.5.1 Windows資料的來源40
2.5.2 Intel處理器資料42
2.6 構建編程環境42
2.6.1 IDE還是命令行42
2.6.2 本書推薦的工作環境43
2.6.3 嘗試編譯第一個程式44
第3章 使用MASM46
3.1 Win32彙編源程式的結構46
3.1.1 模式定義48
3.1.2 段的定義50
3.1.3 程式結束和程式入口53
3.1.4 注釋和換行53
3.2 調用API54
3.2.1 API是什麼54
3.2.2 調用API56
3.2.3 API參數中的等值定義60
3.3 標號、變數和數據結構62
3.3.1 標號62
3.3.2 全局變數64
3.3.3 局部變數65
3.3.4 數據結構68
3.3.5 變數的使用70
3.4 使用子程式74
3.4.1 子程式的定義75
3.4.2 參數傳遞和堆疊平衡76
3.5 高級語法79
3.5.1 條件測試語句79
3.5.2 分支語句80
3.5.3 循環語句82
3.6 代碼風格85
3.6.1 變數和函式的命名85
3.6.2 代碼的書寫格式87
3.6.3 代碼的組織88
初級篇
第4章 第一個視窗程式89
4.1 開始了解視窗89
4.1.1 視窗是什麼89
4.1.2 視窗界面90
4.1.3 視窗程式是怎么工作的92
4.2 分析視窗程式98
4.2.1 模組和句柄98
4.2.2 創建視窗100
4.2.3 訊息循環107
4.2.4 視窗過程109
4.3 視窗間的通信114
4.3.1 視窗間的訊息互發114
4.3.2 在視窗間傳遞數據117
4.3.3 SendMessage和
4.3.3 PostMessage函式的區別118
第5章 使用資源119
5.1 選單和加速鍵120
5.1.1 選單和加速鍵的組成120
5.1.2 選單和加速鍵的資源定義121
5.1.3 使用選單和加速鍵126
5.2 圖示和游標138
5.2.1 圖示和游標的資源定義139
5.2.2 使用圖示和游標139
5.3 點陣圖143
5.3.1 點陣圖簡介143
5.3.2 在資源中定義點陣圖144
5.4 對話框145
5.4.1 對話框簡介145
5.4.2 對話框的資源定義147
5.4.3 使用對話框149
5.4.4 在對話框中使用子
5.4.4 視窗控制項152
5.5 字元串資源174
5.6 版本信息資源176
5.6.1 版本信息資源的定義176
5.6.2 在程式中檢測版本信息179
5.7 二進制資源和自定義資源180
5.7.1 使用二進制資源180
5.7.2 使用自定義資源181
第6章 定時器和Windows時間183
6.1 定時器183
6.1.1 定時器簡介183
6.1.2 定時器的使用方法184
6.2 Windows時間188
6.2.1 Windows時間的獲取和
6.2.1 設定188
6.2.2 計算時間間隔189
第7章 圖形操作191
7.1 GDI原理191
7.1.1 GDI程式的結構192
7.1.2 設備環境195
7.1.3 色彩和坐標201
7.2 繪製圖形203
7.2.1 畫筆和畫刷211
7.2.2 繪製像素點214
7.2.3 繪製圖形214
7.2.4 繪圖模式218
7.3 創建和使用點陣圖220
7.3.1 一個使用點陣圖的時鐘例子220
7.3.2 創建和使用點陣圖230
7.3.3 使用設備無關點陣圖231
7.4 塊傳送操作233
7.4.1 塊傳送方式233
7.4.2 塊傳送函式234
7.5 區域和路徑239
7.5.1 使用區域239
7.5.2 使用路徑241
界面篇
第8章 通用對話框243
8.1 通用對話框簡介243
8.2 使用通用對話框250
8.2.1 “打開”檔案和“保存”
8.2.1 檔案對話框250
8.2.2 字型選擇對話框252
8.2.3 “顏色選擇”對話框254
8.2.4 “查找”和“替換”文本
8.2.4 對話框255
8.2.5 “頁面設定”對話框258
8.2.6 “瀏覽目錄”對話框259
第9章 通用控制項260
9.1 通用控制項簡介260
9.1.1 通用控制項的分類260
9.1.2 使用通用控制項262
9.2 使用狀態欄266
9.2.1 創建狀態欄271
9.2.2 狀態欄的控制訊息272
9.2.3 在狀態欄上顯示選單
9.2.3 提示信息274
9.3 使用工具列275
9.3.1 創建工具列282
9.3.2 工具列的控制訊息285
9.3.3 工具列的通知訊息288
9.4 使用Richedit控制項291
9.4.1 創建Richedit控制項303
9.4.2 Richedit控制項的控制訊息305
9.4.3 Richedit控制項的通知訊息314
9.5 視窗的子類化315
9.5.1 什麼是視窗的子類化315
9.5.2 視窗子類化的實現316
9.6 控制項的超類化322
9.6.1 什麼是控制項的超類化322
9.6.2 控制項超類化的實現323
系統篇
第10章 記憶體管理和檔案操作327
10.1 記憶體管理327
10.1.1 記憶體管理基礎327
10.1.2 記憶體的當前狀態328
10.1.3 標準記憶體管理函式330
10.1.4 堆管理函式335
10.1.5 虛擬記憶體管理函式339
10.1.6 其他記憶體管理函式344
10.2 檔案操作345
10.2.1 Windows的檔案I/O345
10.2.2 創建和讀寫檔案346
10.2.3 查找檔案357
10.2.4 檔案屬性364
10.2.5 其他檔案操作366
10.3 驅動器和目錄367
10.3.1 邏輯驅動器操作368
10.3.2 目錄操作371
10.4 記憶體映射檔案373
10.4.1 記憶體映射檔案簡介374
10.4.2 使用記憶體映射檔案376
第11章 動態程式庫和鉤子384
11.1 動態程式庫384
11.1.1 動態程式庫的概念384
11.1.2 編寫動態程式庫385
11.1.3 使用動態程式庫391
11.1.4 動態程式庫中的數據
11.1.4 共享400
11.1.5 在VC++中使用動態
11.1.5 程式庫401
11.2 Windows鉤子404
11.2.1 什麼是Windows鉤子404
11.2.2 遠程鉤子的安裝和使用406
11.2.3 日誌記錄鉤子414
第12章 多執行緒418
12.1 進程和執行緒418
12.2 多執行緒編程419
12.2.1 一個單執行緒的“問題
12.2.1 程式”419
12.2.2 多執行緒的解決方法423
12.2.3 與執行緒有關的函式427
12.3 使用事件對象控制執行緒431
12.3.1 事件432
12.3.2 等待事件433
12.3.3 進一步改進計數程式434
12.4 執行緒間的同步437
12.4.1 產生同步問題的原因437
12.4.2 各種用於執行緒間同步
12.4.2 的對象442
第13章 過程控制450
13.1 環境變數和命令行參數450
13.1.1 環境變數450
13.1.2 命令行參數453
13.2 執行執行檔458
13.2.1 方法一:Shell調用458
13.2.2 方法二:創建進程460
13.3 進程調試469
13.3.1 獲取運行中的進程句柄469
13.3.2 讀寫進程的地址空間475
13.3.3 調試API的使用480
13.4 進程的隱藏489
13.4.1 在Windows 9x中隱藏
13.4.1 進程489
13.4.2 Windows NT中的遠程
13.4.2 執行緒491
第14章 異常處理503
14.1 異常處理的用途503
14.2 使用篩選器處理異常504
14.2.1 註冊回調函式504
14.2.2 異常處理回調函式506
14.3 使用SEH處理異常510
14.3.1 註冊回調函式512
14.3.2 異常處理回調函式513
14.3.3 SEH鏈和異常的傳遞516
14.3.4 展開操作(Unwinding)518
套用篇
第15章 註冊表和INI檔案522
15.1 註冊表和INI檔案簡介522
15.2 INI檔案的操作523
15.2.1 INI檔案的結構523
15.2.2 管理鍵值525
15.2.3 管理小節532
15.2.4 使用不同的INI檔案533
15.3 對註冊表的操作534
15.3.1 註冊表的結構534
15.3.2 管理子鍵536
15.3.3 管理鍵值547
15.3.4 子鍵和鍵值的枚舉548
15.3.5 註冊表套用舉例551
第16章 WinSock接口和網路編程555
16.1 Windows Socket接口簡介556
16.2 Windows Socket接口的
16.2 使用559
16.2.1 IP位址的轉換559
16.2.2 套接字563
16.2.3 網路應用程式的一般
16.2.3 工作流程566
16.2.4 監聽、發起連線和
16.2.4 接收連線569
16.2.5 數據的收發572
16.2.6 一個最簡單的TCP服務
16.2.6 端程式575
16.3 TCP應用程式的設計581
16.3.1 通信協定和工作執行緒
16.3.1 的設計581
16.3.2 TCP聊天室例子--
16.3.2 伺服器端591
16.3.3 TCP聊天室例子--
16.3.3 客戶端598
16.3.4 以非阻塞方式工作的
16.3.4 TCP聊天室客戶端606
16.3.5 其他常用函式617
第17章 PE檔案621
17.1 PE檔案的結構621
17.1.1 概論621
17.1.2 DOS檔案頭和DOS塊622
17.1.3 PE檔案頭(NT
17.1.3 檔案頭)624
17.1.4 節表和節629
17.2 導入表644
17.2.1 導入表簡介644
17.2.2 導入表的結構646
17.2.3 查看PE檔案導入表舉例649
17.3 導出表651
17.3.1 導出表的結構652
17.3.2 查看PE檔案導出表舉例655
17.4 資源658
17.4.1 資源簡介658
17.4.2 資源的組織方式659
17.4.3 查看PE檔案中的資源
17.4.3 列表舉例662
17.5 重定位表667
17.5.1 重定位表的結構667
17.5.2 查看PE檔案的重定
17.5.2 位表舉例670
17.6 套用實例672
17.6.1 動態獲取API入口地址672
17.6.2 在PE檔案上添加執行
17.6.2 代碼679
第18章 ODBC資料庫編程688
18.1 基礎知識688
18.1.1 資料庫接口的發展歷史688
18.1.2 SQL語言691
18.1.3 ODBC程式的流程693
18.2 連線資料庫694
18.2.1 連線和斷開資料庫694
18.2.2 連線字元串700
18.3 數據的管理703
18.3.1 執行SQL語句703
18.3.2 執行結果的處理708
18.3.3 獲取結果集中的數據710
18.3.4 事務處理715
18.4 資料庫操作的例子717
18.4.1 結果集處理模組718
18.4.2 例子的原始碼723
參考文獻734
基礎篇
第1章 背景知識1
1.1 Win32的軟硬體平台1
1.1.1 80x86系列處理器簡史1
1.1.2 Windows的歷史3
1.1.3 Win32平台的背後--
1.1.3 Wintel聯盟5
1.2 Windows的特色6
1.3 必須了解的基礎知識7
1.3.1 80x86處理器的工作模式7
1.3.2 Windows的記憶體管理9
1.3.3 Windows的特權保護17
第2章 準備編程環境21
2.1 Win32執行檔的
2.1 開發過程21
2.2 編譯器和連結器23
2.2.1 MASM系列23
2.2.2 TASM系列27
2.2.3 其他編譯器28
2.2.4 MASM,TASM還是
2.2.4 NASM29
2.2.5 我們的選擇--MASM32
2.2.5 SDK軟體包30
2.3 創建資源31
2.3.1 資源編譯器的使用31
2.3.2 所見即所得的資源編輯器32
2.4 make工具的用法34
2.4.1 make工具是什麼34
2.4.2 nmake的用法35
2.4.3 描述檔案的語法36
2.5 獲取資料39
2.5.1 Windows資料的來源40
2.5.2 Intel處理器資料42
2.6 構建編程環境42
2.6.1 IDE還是命令行42
2.6.2 本書推薦的工作環境43
2.6.3 嘗試編譯第一個程式44
第3章 使用MASM46
3.1 Win32彙編源程式的結構46
3.1.1 模式定義48
3.1.2 段的定義50
3.1.3 程式結束和程式入口53
3.1.4 注釋和換行53
3.2 調用API54
3.2.1 API是什麼54
3.2.2 調用API56
3.2.3 API參數中的等值定義60
3.3 標號、變數和數據結構62
3.3.1 標號62
3.3.2 全局變數64
3.3.3 局部變數65
3.3.4 數據結構68
3.3.5 變數的使用70
3.4 使用子程式74
3.4.1 子程式的定義75
3.4.2 參數傳遞和堆疊平衡76
3.5 高級語法79
3.5.1 條件測試語句79
3.5.2 分支語句80
3.5.3 循環語句82
3.6 代碼風格85
3.6.1 變數和函式的命名85
3.6.2 代碼的書寫格式87
3.6.3 代碼的組織88
初級篇
第4章 第一個視窗程式89
4.1 開始了解視窗89
4.1.1 視窗是什麼89
4.1.2 視窗界面90
4.1.3 視窗程式是怎么工作的92
4.2 分析視窗程式98
4.2.1 模組和句柄98
4.2.2 創建視窗100
4.2.3 訊息循環107
4.2.4 視窗過程109
4.3 視窗間的通信114
4.3.1 視窗間的訊息互發114
4.3.2 在視窗間傳遞數據117
4.3.3 SendMessage和
4.3.3 PostMessage函式的區別118
第5章 使用資源119
5.1 選單和加速鍵120
5.1.1 選單和加速鍵的組成120
5.1.2 選單和加速鍵的資源定義121
5.1.3 使用選單和加速鍵126
5.2 圖示和游標138
5.2.1 圖示和游標的資源定義139
5.2.2 使用圖示和游標139
5.3 點陣圖143
5.3.1 點陣圖簡介143
5.3.2 在資源中定義點陣圖144
5.4 對話框145
5.4.1 對話框簡介145
5.4.2 對話框的資源定義147
5.4.3 使用對話框149
5.4.4 在對話框中使用子
5.4.4 視窗控制項152
5.5 字元串資源174
5.6 版本信息資源176
5.6.1 版本信息資源的定義176
5.6.2 在程式中檢測版本信息179
5.7 二進制資源和自定義資源180
5.7.1 使用二進制資源180
5.7.2 使用自定義資源181
第6章 定時器和Windows時間183
6.1 定時器183
6.1.1 定時器簡介183
6.1.2 定時器的使用方法184
6.2 Windows時間188
6.2.1 Windows時間的獲取和
6.2.1 設定188
6.2.2 計算時間間隔189
第7章 圖形操作191
7.1 GDI原理191
7.1.1 GDI程式的結構192
7.1.2 設備環境195
7.1.3 色彩和坐標201
7.2 繪製圖形203
7.2.1 畫筆和畫刷211
7.2.2 繪製像素點214
7.2.3 繪製圖形214
7.2.4 繪圖模式218
7.3 創建和使用點陣圖220
7.3.1 一個使用點陣圖的時鐘例子220
7.3.2 創建和使用點陣圖230
7.3.3 使用設備無關點陣圖231
7.4 塊傳送操作233
7.4.1 塊傳送方式233
7.4.2 塊傳送函式234
7.5 區域和路徑239
7.5.1 使用區域239
7.5.2 使用路徑241
界面篇
第8章 通用對話框243
8.1 通用對話框簡介243
8.2 使用通用對話框250
8.2.1 “打開”檔案和“保存”
8.2.1 檔案對話框250
8.2.2 字型選擇對話框252
8.2.3 “顏色選擇”對話框254
8.2.4 “查找”和“替換”文本
8.2.4 對話框255
8.2.5 “頁面設定”對話框258
8.2.6 “瀏覽目錄”對話框259
第9章 通用控制項260
9.1 通用控制項簡介260
9.1.1 通用控制項的分類260
9.1.2 使用通用控制項262
9.2 使用狀態欄266
9.2.1 創建狀態欄271
9.2.2 狀態欄的控制訊息272
9.2.3 在狀態欄上顯示選單
9.2.3 提示信息274
9.3 使用工具列275
9.3.1 創建工具列282
9.3.2 工具列的控制訊息285
9.3.3 工具列的通知訊息288
9.4 使用Richedit控制項291
9.4.1 創建Richedit控制項303
9.4.2 Richedit控制項的控制訊息305
9.4.3 Richedit控制項的通知訊息314
9.5 視窗的子類化315
9.5.1 什麼是視窗的子類化315
9.5.2 視窗子類化的實現316
9.6 控制項的超類化322
9.6.1 什麼是控制項的超類化322
9.6.2 控制項超類化的實現323
系統篇
第10章 記憶體管理和檔案操作327
10.1 記憶體管理327
10.1.1 記憶體管理基礎327
10.1.2 記憶體的當前狀態328
10.1.3 標準記憶體管理函式330
10.1.4 堆管理函式335
10.1.5 虛擬記憶體管理函式339
10.1.6 其他記憶體管理函式344
10.2 檔案操作345
10.2.1 Windows的檔案I/O345
10.2.2 創建和讀寫檔案346
10.2.3 查找檔案357
10.2.4 檔案屬性364
10.2.5 其他檔案操作366
10.3 驅動器和目錄367
10.3.1 邏輯驅動器操作368
10.3.2 目錄操作371
10.4 記憶體映射檔案373
10.4.1 記憶體映射檔案簡介374
10.4.2 使用記憶體映射檔案376
第11章 動態程式庫和鉤子384
11.1 動態程式庫384
11.1.1 動態程式庫的概念384
11.1.2 編寫動態程式庫385
11.1.3 使用動態程式庫391
11.1.4 動態程式庫中的數據
11.1.4 共享400
11.1.5 在VC++中使用動態
11.1.5 程式庫401
11.2 Windows鉤子404
11.2.1 什麼是Windows鉤子404
11.2.2 遠程鉤子的安裝和使用406
11.2.3 日誌記錄鉤子414
第12章 多執行緒418
12.1 進程和執行緒418
12.2 多執行緒編程419
12.2.1 一個單執行緒的“問題
12.2.1 程式”419
12.2.2 多執行緒的解決方法423
12.2.3 與執行緒有關的函式427
12.3 使用事件對象控制執行緒431
12.3.1 事件432
12.3.2 等待事件433
12.3.3 進一步改進計數程式434
12.4 執行緒間的同步437
12.4.1 產生同步問題的原因437
12.4.2 各種用於執行緒間同步
12.4.2 的對象442
第13章 過程控制450
13.1 環境變數和命令行參數450
13.1.1 環境變數450
13.1.2 命令行參數453
13.2 執行執行檔458
13.2.1 方法一:Shell調用458
13.2.2 方法二:創建進程460
13.3 進程調試469
13.3.1 獲取運行中的進程句柄469
13.3.2 讀寫進程的地址空間475
13.3.3 調試API的使用480
13.4 進程的隱藏489
13.4.1 在Windows 9x中隱藏
13.4.1 進程489
13.4.2 Windows NT中的遠程
13.4.2 執行緒491
第14章 異常處理503
14.1 異常處理的用途503
14.2 使用篩選器處理異常504
14.2.1 註冊回調函式504
14.2.2 異常處理回調函式506
14.3 使用SEH處理異常510
14.3.1 註冊回調函式512
14.3.2 異常處理回調函式513
14.3.3 SEH鏈和異常的傳遞516
14.3.4 展開操作(Unwinding)518
套用篇
第15章 註冊表和INI檔案522
15.1 註冊表和INI檔案簡介522
15.2 INI檔案的操作523
15.2.1 INI檔案的結構523
15.2.2 管理鍵值525
15.2.3 管理小節532
15.2.4 使用不同的INI檔案533
15.3 對註冊表的操作534
15.3.1 註冊表的結構534
15.3.2 管理子鍵536
15.3.3 管理鍵值547
15.3.4 子鍵和鍵值的枚舉548
15.3.5 註冊表套用舉例551
第16章 WinSock接口和網路編程555
16.1 Windows Socket接口簡介556
16.2 Windows Socket接口的
16.2 使用559
16.2.1 IP位址的轉換559
16.2.2 套接字563
16.2.3 網路應用程式的一般
16.2.3 工作流程566
16.2.4 監聽、發起連線和
16.2.4 接收連線569
16.2.5 數據的收發572
16.2.6 一個最簡單的TCP服務
16.2.6 端程式575
16.3 TCP應用程式的設計581
16.3.1 通信協定和工作執行緒
16.3.1 的設計581
16.3.2 TCP聊天室例子--
16.3.2 伺服器端591
16.3.3 TCP聊天室例子--
16.3.3 客戶端598
16.3.4 以非阻塞方式工作的
16.3.4 TCP聊天室客戶端606
16.3.5 其他常用函式617
第17章 PE檔案621
17.1 PE檔案的結構621
17.1.1 概論621
17.1.2 DOS檔案頭和DOS塊622
17.1.3 PE檔案頭(NT
17.1.3 檔案頭)624
17.1.4 節表和節629
17.2 導入表644
17.2.1 導入表簡介644
17.2.2 導入表的結構646
17.2.3 查看PE檔案導入表舉例649
17.3 導出表651
17.3.1 導出表的結構652
17.3.2 查看PE檔案導出表舉例655
17.4 資源658
17.4.1 資源簡介658
17.4.2 資源的組織方式659
17.4.3 查看PE檔案中的資源
17.4.3 列表舉例662
17.5 重定位表667
17.5.1 重定位表的結構667
17.5.2 查看PE檔案的重定
17.5.2 位表舉例670
17.6 套用實例672
17.6.1 動態獲取API入口地址672
17.6.2 在PE檔案上添加執行
17.6.2 代碼679
第18章 ODBC資料庫編程688
18.1 基礎知識688
18.1.1 資料庫接口的發展歷史688
18.1.2 SQL語言691
18.1.3 ODBC程式的流程693
18.2 連線資料庫694
18.2.1 連線和斷開資料庫694
18.2.2 連線字元串700
18.3 數據的管理703
18.3.1 執行SQL語句703
18.3.2 執行結果的處理708
18.3.3 獲取結果集中的數據710
18.3.4 事務處理715
18.4 資料庫操作的例子717
18.4.1 結果集處理模組718
18.4.2 例子的原始碼723
參考文獻734