程序提供程式所需要的資源,如:資料、**等等
程序扮演的角色僅僅是為當前程式提供資源,或者**,這就是程序所提供的,當時程式執行的狀態和程序沒有關係,程序可以看做空間的概念
例子:程序相當於乙個房子,房子裡面的東西,這些東西就是程序提供的;房子裡面走來走去的人,和使用東西的人,就是執行緒
你看到的這些東西就是程序
找到最後發現到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...