15-任务门
1. 任務(wù)門
上一節(jié)已經(jīng)基本掌握了使用 call/jmp 去訪問一個任務(wù)段,來達到切換一堆寄存器的目的。但是,CPU同時又提供了另一種方法讓我們訪問任務(wù)段——任務(wù)門。
而任務(wù)門是安裝在 IDT 表中的。之前學(xué)中斷門的時候,就簡單介紹了IDT表中可以安裝中斷門、陷阱門,還有一個當(dāng)時只是稍微提了一下,那就是任務(wù)門。
說白了就是想表達,IDT 表中只可以安裝 3 種門:中斷門、陷阱門和任務(wù)門。
思考一下,既然都可以使用 call/jmp 來訪問任務(wù)段了,為什么又弄個任務(wù)門來訪問段,何必多此一舉?仔細想想,使用 int 指令加索引號,是不是比call/jmp加選擇子要方便。因為一個 int 0x20 指令(假設(shè)我在 IDT[20]處安裝了一個任務(wù)門描述符)就可以讓我切換一堆寄存器。
到現(xiàn)在或許你已經(jīng)明白門的含義了,所有的門描述符的里頭都嵌入著另一個段的選擇子。比如中斷門和陷阱門中嵌入了代碼段的選擇子。任務(wù)門也不例外,它里頭嵌入了任務(wù)段的選擇子。
2. 任務(wù)門描述符
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 字節(jié) |76543210|76543210|7 65 4 3210|76543210|76543210|76543210|76543210|76543210| 比特 |-----------------|1|--|0|0101|--------|--------|--------|--------|--------| 占位 | reserved |P|D |S|TYPE| |segment selector | reserved | 含義 | 31-16 |P | | | 15-0 ||L |任務(wù)門的 S=0, TYPE=0101。
在Windows中,典型任務(wù)門描述符就是安裝在 IDT[8] 的位置,00008500`00501188.其中有用的就只有標紅的部分。它告訴我們,該任務(wù)段的段選擇子是0x0050.
3. 分析 xp 系統(tǒng)的 windows 任務(wù)門
- 實驗
上圖可以得出,TSS段的選擇子為 0x0050。現(xiàn)在去查GDT表的0x0050選擇子對應(yīng)的描述符。
圖2 GDT表中的TSS段描述符通過分析圖2,可以看到該TSS段描述符的段基址是0x8054a100,段界限是104B. 現(xiàn)在去看看0x8054a100處的TSS段長什么樣。
圖3 Windows XP 中的 TSS段- 對齊到TSS段結(jié)構(gòu)體
4. 總結(jié)
CPU提供任務(wù)門,是為了方便訪問任務(wù)段。在CPU發(fā)生二重錯誤的時候,會直接跳到 8 號中斷,而 8 號中斷就是任務(wù)門(這是Windows xp 系統(tǒng)設(shè)計的任務(wù)門),這意味著什么?
一旦進入 8 號中斷,CPU 會切換一堆寄存器,這時候無論發(fā)生什么錯誤都沒什么關(guān)系,通過一堆寄存器的切換,CPU 保證能跳到一個正確的地方去執(zhí)行(除非那個地方也被破壞了),緊接著做一些后續(xù)處理(比如收集錯誤信息),系統(tǒng)藍屏。
總結(jié)
- 上一篇: java咖啡是研磨的吗_研磨咖啡,这三个
- 下一篇: AppUpdate