Win32之程序建立過程

2022-01-10 02:09:14 字數 2083 閱讀 9444

程序提供程式所需要的資源,如:資料、**等等

程序扮演的角色僅僅是為當前程式提供資源,或者**,這就是程序所提供的,當時程式執行的狀態和程序沒有關係,程序可以看做空間的概念

例子:程序相當於乙個房子,房子裡面的東西,這些東西就是程序提供的;房子裡面走來走去的人,和使用東西的人,就是執行緒

你看到的這些東西就是程序

找到最後發現到0x7ffef000結束(這裡是個小tips了)

一、核心空間分布:

在4gb記憶體的作業系統中,高2g的給記憶體空間作業系統(也就是核心)使用,這部分記憶體空間所有程序共享。

低2g的記憶體給各個程序使用,每個程序占有獨立的記憶體空間,相互程序其記憶體之間並不影響。

所謂的程序不是乙個檔案組成,而是多個檔案組成

1)、任何程序都是別的程序建立的

系統中的程式都是通過explorer.exe建立的,這個程式呼叫了createprocess()函式

2)、程序的建立過程

1、對映exe檔案

2、建立核心物件`eprocess`

3、對映系統dll(ntdll.dll)

4、建立執行緒核心物件`ethread`

5、系統啟動執行緒

對映dll(ntdll.ldrlnitializethunk)

執行緒開始執行

舉個例子,我們點選 a.exe 就會呼叫 createprocess() 函式

假設從這開始,然後我們畫圖,寫入程序a

第二步:建立核心物件 eprocess

每個物件都有自己的 eprocess 程序物件,也就是結構體

(無需深究)

第三步:對映系統dll(ntdll.dll)

也就是說,不管什麼程序建立的時候,都會有個 ntdll.dll,然後繼續把ntdll對映進去

第四步:建立執行緒核心物件 ethread

每個程序中都會自動建立乙個執行緒,跟程序一樣,因為乙個程序就得有乙個執行緒,啟動乙個程序就有eprocess 結構體

然後程序自動建立乙個執行緒物件 ethread

第五步:系統啟動執行緒

每乙個程序都是由一堆pe來的,比如乙個exe帶了一堆dll,然而dll不是隨便亂帶的

因為pe建立中可能只使用到了test.dll中的某個函式,但是test.dll可能又帶了love.dll中的東西

這時候發現程序只是乙個空間的概念,真正用的人是執行緒

win32建立子程序方法

看到網上有乙個示例,我查了先關函式,做了一些注釋,自己學習下 include include include using namespace std pragma comment lib,ws2 32 int main 該結構用於指定新程序的主視窗特性 si.cb sizeof si process...

WIN32視窗建立

win32視窗建立過程 1 定義視窗類 在msdn中找到函式原型 winmain 2 定義視窗處理函式 在msdn中找到原型 windowproc 3 設計視窗類 4 註冊視窗類 registerclass registerclas 5 建立視窗 createwindow createwindowe...

Win32窗體建立

include 視窗過程函式 lresult callback wndproc hwnd hwnd,uint umsg,wparam wparam,lparam lparam return defwindowproc hwnd,umsg,wparam,lparam int winapi winmai...