windows核心編程 總結

1 . 用於創建內核對象的所有函數均返回與進程相關的句柄,這些句柄可以被在相同進程中運行的任何或所有線程成功地加以使用,該句柄值實際上是放 入進程的句柄表中的索引,它用於標識內核對象的信息存放的位置。因此當調試一個應用程序並且觀察內核對象句柄的實際值時,會看到一些較小的 值,如1 ,2 等(系統建立了一個句柄表,用來存儲這些進程的句柄)

2 不是所有創建內核對象函數失敗後的返回值是NULL,也有可能是-1(lNVALID_HANDLE_VALUE)。

 

3 每個進程分配的虛擬內存地址空間第一個分區時NULL指針分配的分區,進程地址空間的這個分區的設置是爲了幫助程序員掌握N U L L指針的分配情況。如果你的進程中的線程試圖讀取該分區的地址空間的數據,或者將數據寫入該分區的地址空間,那麼C P U就會引發一個訪問違規。保護這個分區是極其有用的,它可以幫助你發現N U L L指針的分配情況。

C / C + +程序中常常不進行嚴格的錯誤檢查。例如,下面這個代碼就沒有進行任何錯誤檢查:

 

int* pnSomeInteger = (int*) malloc(sizeof(int));
*pnSomeInteger = 5;

如果m a l l o c不能找到足夠的內存來滿足需要,它就返回N U L L。但是,該代碼並不檢查這種可能性,它認爲地址的分配已經取得成功,並且開始訪問0 x 0 0 0 0 0 0 0 0地址的內存。由於這個分區的地址空間是禁止進入的,因此就會發生內存訪問違規現象,同時該進程將終止運行。這個特性有助於編程員發現應用程序中的錯誤。

 

4 堆棧

當進程初始化時,系統在進程的地址空間中創建一個堆棧。該堆棧稱爲進程的默認堆棧。按照默認設置,該堆棧的地址空間區域的大小是1 MB。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章