Windows高階程式設計學習筆記(一)

2021-07-22 04:05:58 字數 1442 閱讀 8654

寫在前面的話

之前學的windows程式設計都是介面啊、網路程式設計啊之類的純應用層面的東西,總是感覺而自己沒有達到自己期望中的水平。什麼水平呢?如果讓你編寫監控系統資源的工具,或者dll注入相關軟體,或者底層安全軟體,可以勝任嗎?我的答案是,並不會。所以,離目標還很遠,得繼續學。

此階段學習的是windows高階程式設計,期間也了解了點核心驅動開發。後者是更深層次的研究,主要研究編寫執行在ring0層的核心程式,難度更高,是達到我期望的技術水平的努力方向。現階段還是先攻克windows高階程式設計,步步為營,讀書,練習,做筆記,打好基本功。

好,開始今天的學習。

因為第一章說的是win32與作業系統版本之間的相關事項,所以這裡略過。

第二章 核心物件

1、概念不愧是高階程式設計,上來就談核心。

這一章中主要說了,一些重要的系統資源,是通過核心物件來管理的。比如程序。程序也是通過核心物件來管理的,但是程序的資料、**是放在使用者態記憶體裡面的。注意突出理解兩個字:管理

根據我的理解,畫出了下面的簡單的關係示意圖。主要需要明白控制代碼表的工作原理,系統是怎麼通過控制代碼表來管理系統的核心物件的。這裡只說學習方向,不詳細解析了,書上都有。

2、使用

只能通過api來建立、釋放核心物件。

核心物件通過核心控制代碼表來管理。應用程式中的控制代碼是核心物件在核心控制代碼表中的索引(書上說在nt中是位元組數,這個沒有被文件化,所以僅做理解,實際情況大差不差)。

每個核心物件有乙個使用計數,也叫引用計數。多個程序使用同乙個核心物件的話,每多乙個使用者,使用計數+1。當程序結束時,作業系統為程序清理相關資源,挨個釋放核心控制代碼表中的物件。很顯然,這樣的機制能夠保證核心物件能被正確地建立、銷毀,很好地對核心物件進行了管理。

如果需要程序間共享核心物件的話,有幾種特定的方法。核心物件被設計成只能通過特定的方法訪問,這樣做是為了安全性考慮。第一章中介紹了程序間共享核心物件的幾種方法:

先大致了解原理,用到的時候,知道找什麼**就行了。

另外需要提到的是安全描述符。剛開始看到這個東西,不知道它是用來幹嘛的,看起來很煩(不知道你面對一串不知含義的引數還有沒有看下去的慾望)。看了其他的書籍後,消化了一段時間,現在是明白了它的用處。前面提到,核心物件的訪問是很注重安全性的。使用安全描述符就是核心物件的建立者用來告訴作業系統,我建立的這個東西誰能用,能怎麼用(讀寫等)。原理就是這麼簡單。

本章末尾那個例項說明了,duplicatehandle可以用於程序自己給自己複製控制代碼,這兩個不同的控制代碼指向同乙個核心物件。使用情景是多執行緒中需要使用同乙個核心物件,如何正確關閉控制代碼。

JavaScript高階程式設計學習筆記

雖然object建構函式或物件字面量都可以用來建立單個物件,但這些方式有個明顯的缺點 使用同乙個介面建立很多物件,會產生大量的重複 為解決這個問題,人們開始使用 工廠模式的一種變體。function createperson name,age,job returno var person1 crea...

js JavaScript高階程式設計學習筆記15

第十七章 錯誤處理與除錯 1 try catch語句。如果try塊中的任何 發生了錯誤,就會立即退出執行開始執行catch塊。必須要給catch的錯誤物件起名字。不同瀏覽器都有乙個message屬性儲存錯誤訊息。2 finally子句,在try catch塊後,無論如何都會執行finally子句的內...

python 高階程式設計學習筆記

2.enumerate 用法 i 0 for el in a b c print i,el i 1 上面這個遠不如下面的方法 for i,el in enumerate a b c print i,el 3.合併兩個列表,最終生成乙個字典 4.序列解包 a,b,rest 1,2,3,4,5 prin...