09 Windows執行緒切換FS

2021-09-11 00:09:42 字數 1137 閱讀 8581

fs:[0]在3環指向teb,進0環後指向kpcr

系統中同時存在多個執行緒,這就意味著fs:[0]在3環時指向的teb有多個(每個執行緒乙份)

但我們在實際使用中發現,當我們在不同執行緒中檢視fs的值時,fs的段選擇子都是相同的,那是如何通過乙個fs暫存器指向多個teb的呢?

swapcontext**片段

loc_46aaa4:                             ; code xref: swapcontext+86↑j

.text:0046aaa4 ; swapcontext+af↑j

.text:0046aaa4 mov eax, [ebx+18h] ; 取出目標執行緒的teb

.text:0046aaa7 mov ecx, [ebx+3ch] ; 獲取get

.text:0046aaaa mov [ecx+3ah], ax ; 修改gdt表中段描述符的基位址,ax的底2位元組儲存到段描述符底4位元組的16~31位

.text:0046aaae shr eax, 10h ; 右移16位得到位址的高2位元組

.text:0046aab1 mov [ecx+3ch], al ; 修改高4位元組的0~7位

.text:0046aab4 mov [ecx+3fh], ah ; 修改高4位元組的24~31位

.text:0046aab7 inc dword ptr [esi+4ch] ; 統計切換次數

.text:0046aaba inc dword ptr [ebx+61ch] ; 統計資訊

.text:0046aac0 pop ecx

結合下圖的段描述符看**

多執行緒遊戲 切水果

1.畫水果剛開始寫的時候,不知道怎麼將水果顯示出來,但後來發現,每乙個水果執行緒除了不一樣之外,所做的事情都是一樣的,所以,遊戲一開始,當容器裡面的水果執行緒小於三個的時候,就建立水果執行緒,然後在每個執行緒中隨機選擇,當有的被切之後或者掉下來之後,就把對應的水果執行緒銷毀,然後再去判斷容器裡面的水...

python python為何多執行緒無法切換

寫了乙個kafka傳輸訊息,celery發布任務的指令碼。有四個執行緒,分別讀取不同的kafka佇列資訊 問題是,只有第乙個執行緒會啟動,剩下的三個執行緒連start都執行不了。而且這個問題不是一開始就發生的,最開始跑 的時候很正常。連續執行了半個月都沒問題。就是後來重啟後就有問題了。後來發現,在每...

python python為何多執行緒無法切換

寫了乙個kafka傳輸訊息,celery發布任務的指令碼。有四個執行緒,分別讀取不同的kafka佇列資訊 問題是,只有第乙個執行緒會啟動,剩下的三個執行緒連start都執行不了。而且這個問題不是一開始就發生的,最開始跑 的時候很正常。連續執行了半個月都沒問題。就是後來重啟後就有問題了。後來發現,在每...