執行緒控制代碼和執行緒標識

2021-08-10 12:29:40 字數 2140 閱讀 2110

handle的引用計數和有關的屬性,handle是os標識程序和執行緒的東西,但是使用者也可以用這個來標識程序和執行緒,對其操作

●createthread() api 用於建立執行緒。 api 返回同時執行緒控制代碼,並通過引數得到執行緒識別符號 (id)。 執行緒控制代碼有完全訪問權建立執行緒物件。 執行執行緒時執行緒 id 唯一標識執行緒在系統級別。

●id是在windows系統範圍內唯一標示thread的。   

●handle是用來操作thread的,可以有多個,每個handle可以有不同的操作許可權,在不同程序openthread得到的值不一樣。  

●執行緒的id是系統全域性的,其handle是程序區域性的.

●handle是os和client之間用來操作程序和執行緒乙個橋梁,os有一張維護handle的表單,裡面大概放置了   handle的引用計數和有關的屬性,handle是os標識程序和執行緒的東西,但是使用者也可以用這個來標識程序和執行緒,對其操作;而id是os用來標識程序和執行緒的,並且是全域性唯一的,  但使用者可以通過這個id獲得程序執行緒的handle,多次得到的handle並不一定是一樣的.handle是核心物件,而id好像不是,並沒有專門建立id的函式.

●id是createthread時作業系統自動生成的。

●執行緒的控制代碼和id是不同的。  

在windows系統中,執行緒的id是唯一對應的,也就是說,如果兩個執行緒返回相同的id,則他們必然是同一執行緒,反之一定是不同的執行緒。而執行緒的控制代碼並不是執行緒的唯一標識,執行緒的控制代碼只是用來訪問該執行緒的的乙個32位值,儘管相同的控制代碼一定標識同一執行緒,但同一執行緒可能擁有兩個開啟的控制代碼,因此,不能用控制代碼來區分兩個執行緒是否是同一執行緒。

boos

::thread

執行緒的預設屬性為非分離狀態

,執行緒結束後執行緒識別符號、執行緒退出狀態等資訊需要通過

join

方法**。

boost::thread thread_func(func);

thread_func.join();

join方法會阻塞,直到該執行緒執行結束。

join函式是

boost::thread

中少數幾個會丟擲異常的方法之一。

當join

函式過程中如果

interrupt() 方法被呼叫,

join

函式會丟擲乙個

boost::thread_interrupted

異常。例外

bool timed_join(timeduration const& rel_time);方法阻塞特定的時間,如果超時了但執行緒仍未退出,則返回

false

。當使用者並不關心執行緒的退出狀態時,可以設定thread

狀態為分離,這樣

boost::thread

會自動**執行緒資源。

boost::thread thread_func(func);

thread_func.

detach();

bool joinable() 

方法返回執行緒是否是分離狀態。

當代表乙個執行執行緒的

執行緒物件被破壞時,這個

執行緒變成分

離的,一旦它被

分離,將會繼續執行知道喚醒由構造體提供的函式或者可呼叫物件執行結束,或者程式已經結束。

執行緒也可以通過呼叫detach()成員函式來顯示的

分離。在這種情形下,

執行緒物件將不在表示乙個當前分離的

執行緒,而是乙個非

執行緒體。

用c++實現的殼

殼。。。。。。在了解了一些關於匯入表,匯出表,重定位表,iat等基礎知識後方可寫出乙個具有基本功能的殼

如果想要寫乙個加密,壓縮或相容性很強的殼的話,不是容易的事。

實現如iat加密,iat-hook,花指令,反除錯等功能的殼

基礎版殼所實現的功能:

1,在原程式中新增一塊區段,將殼部分的**移植進去

2,在程式啟動前優先獲得控制權,執行完自己的**以後再將控制權交還給原程式

3,對**段進行簡單的亦或加密、

4,對源程式的匯入表iat進行修復

5,如果源程式開啟了隨機基址,則對源程式進行重定位修復

專案分為兩部分,第一部分為加殼程式(pack),第二部分為外殼程式(shell。dll)

其中涉及到的重點是修復匯入表和重定位表,這是加殼後的程式能夠正常執行的基礎

執行緒 執行緒控制代碼 執行緒ID

什麼是控制代碼 控制代碼是一種指向指標的指標。我們知道,所謂指標是一種記憶體位址。應用程式啟動後,組成這個程式的各物件是住留在記憶體的。如果簡單地理解,似乎我們只要獲知這個記憶體的首位址,那麼就可以隨時用這個位址訪問物件。但是,如果您真的這樣認為,那麼您就大錯特錯了。我們知道,windows是乙個以...

執行緒 執行緒控制代碼 執行緒ID

什麼是控制代碼 控制代碼是一種指向指標的指標。我們知道,所謂指標是一種記憶體位址。應用程式啟動後,組成這個程式的各物件是住留在記憶體的。如果簡單地理解,似乎我們只要獲知這個記憶體的首位址,那麼就可以隨時用這個位址訪問物件。但是,如果您真的這樣認為,那麼您就大錯特錯了。我們知道,windows是乙個以...

執行緒控制代碼和執行緒ID的區別

createthread api 用於建立執行緒。api 返回同時執行緒控制代碼,並通過引數得到執行緒識別符號 id 執行緒控制代碼有完全訪問權建立執行緒物件。執行執行緒時執行緒 id 唯一標識執行緒在系統級別。id是在windows系統範圍內唯一標示thread的。handle是用來操作threa...