核心知識第十一講,門,以及中斷和中斷異常

2022-03-20 20:36:18 字數 2440 閱讀 4754

首先,cup在執行**的時候.是按照任務執行的

每個任務有乙個任務狀態段tss

用於保護任務的有關資訊.在任務內變換特權級和任務切換的時候.要用到這些資訊.

這個就是tss任務狀態段.

而在windows 80386中.有兩種系統段.一種就是tss,另一種就是ldt

系統段描述符格式:

這個系統段和儲存段相同.

當dt = 1 表示這是個儲存段

當dt = 0 則表示這個是系統段.

而如果是系統段.那麼type屬性就很重要了.

而tr暫存器,就是儲存了當前任務段的選擇子.

而且是存放在gdt表中的.

當屬性為c的是否.則是門描述符. 

格式:

門描述符的作用就是描述某個子程式的入口. 用門內的選擇子.還有偏移.利用call或者jmp可以呼叫.

也就是說當我們三環呼叫api的是否,內部會使用門來進行特權級轉換.而且門描述符記錄了引數的個數. 還會儲存 ring0的棧,

從棧裡面獲取引數資訊.

當返回的是否,呼叫 retf彙編指令,從0環切換到3環.

檢視tss屬性段.

當輸入命令 dg  0 100 則會顯示100項gdt表的內容.

其中,作業系統在做api的時候,並沒有使用門描述符來做.

我們自己可以構建乙個門描述符 .這樣當我們的三環呼叫我們的api的時候.

就可以呼叫到這個我們自己構造的門描述符了.

首先,什麼是中斷?

在我們的8086的年代裡面. 呼叫api的是否是 int 21來進行呼叫的.

這就是乙個中斷.中斷是什麼?  其實中斷就是乙個電訊號.

比如使用者操作鍵盤,鍵當被按下就會產生乙個中斷.  但是cpu能接受到這個中斷.但是不能去處理. 這個要作業系統去處理.

所以當有中斷產生, cpu就會查表 . 表內容是固定的. 作業系統會填寫函式指標. 當我們按鍵,產生中斷了. 那麼就會查表進行操作.

中斷其實也是cpu和作業系統通訊的一種機制.

比如我們的 int 3指令. 就產生乙個異常.而在cpu接受到了,就會去查表.這樣就可以處理int 3的指令了.

中斷我們說過了,是電訊號. 而表則是cpu和作業系統的通訊機制.

那麼說下異常把. 其實異常也是中斷. 只不過,我們的軟體除錯的時候.當我們的程式用內聯彙編寫的int 3的時候,就會產生斷點功能.

其實軟體產生的中斷,就叫做異常. 而且int 3指令在ring3呼叫的時候.會產生特權級改變. cpu也會固定的去查表.

在80386裡面.有兩個銀腳,是專門接受中斷訊號的.

而且80386最多接受256種中斷或者異常.

引腳:intr 專門接受中斷或者異常, 當我們呼叫cli彙編指令的時候.其實遮蔽的就是intr.不讓其接受中斷訊號.

nmi  這個也是接受的.但是不能遮蔽的. 比如我們的系統在執行中,你把記憶體條拔了.那麼就會產生電訊號.有nmi引腳傳送.

我們上面說過,中斷是cpu和作業系統通訊的一種機制.

cpu接受中斷. 那麼就要查表.而作業系統要往這個表中填寫函式指標.讓cpu去執行.

比如我們的8086cpu,呼叫api的是否,其實就是 int 21h,其實21h就是在查表.查表中的第21項.可以把錶看作成陣列.

上面說的中斷表.其實就是idt表. idt表因為在80386下,最多處理256個,所以這個idt表只有256項.

而idt表和gdt一樣.只不過idt表中儲存的是門描述符.

比如:我們的int 3斷點產生了. 那麼就回去idt表中尋找第三項.進行操作.

windbg除錯檢視.

idt表的首位址會存放在idtr暫存器中. 然後每一項都是按照門描述符來管理. 所以當我們拆出來的位址拼接成乙個完整的位址,就可以檢視完整的處理int 3斷點的**了.

當我們hook了這個第三項.那麼你的程式將永運不會產生int 3斷點.

其中,idt表中每一項都是8個位元組,因為不光要描述函式位址,還要藐視額外的屬性資訊.

第十一講 過載

過載單目運算子 單目運算子只有乙個運算元 如 a,b,i,j 等 因此過載函式只有乙個引數,如果過載函式為成員函式,還可以省約此引數。例 將 過載成友元函式。單目運算子一般過載為成員函式 include class complex void show complex operator complex...

第十一講 資料清洗

資料採集完,要進行資料清洗工作,整個資料分析過程中,資料清洗工作幾乎要佔到80 的時間。資料清洗規則總結為四個關鍵點 完全合一 1 完整性 單條資料是否存在空值,統計的字段是否完善。2 全面性 觀察某一列的全部數值,比如平均值 最大值 最小值,根據常識判斷是否有問題。如 資料定義 單位標識 數值本身...

第十一講 if分支語句

1 if單分支 語法結構 if 條件 code.code.注 1,條件是表示式,不需要用括號括起來 2,條件的結束要有冒號 3,語句塊沒有花括號,而是由統一的縮進來實現 eg1 count 89 if count 80 條件是表示式,不需要用括號括起來 print larger then 80 eg...