日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

15-任务门

發布時間:2023/12/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 15-任务门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 任務門

上一節已經基本掌握了使用 call/jmp 去訪問一個任務段,來達到切換一堆寄存器的目的。但是,CPU同時又提供了另一種方法讓我們訪問任務段——任務門。

而任務門是安裝在 IDT 表中的。之前學中斷門的時候,就簡單介紹了IDT表中可以安裝中斷門、陷阱門,還有一個當時只是稍微提了一下,那就是任務門。

說白了就是想表達,IDT 表中只可以安裝 3 種門:中斷門、陷阱門和任務門

思考一下,既然都可以使用 call/jmp 來訪問任務段了,為什么又弄個任務門來訪問段,何必多此一舉?仔細想想,使用 int 指令加索引號,是不是比call/jmp加選擇子要方便。因為一個 int 0x20 指令(假設我在 IDT[20]處安裝了一個任務門描述符)就可以讓我切換一堆寄存器。

到現在或許你已經明白門的含義了,所有的門描述符的里頭都嵌入著另一個段的選擇子。比如中斷門和陷阱門中嵌入了代碼段的選擇子。任務門也不例外,它里頭嵌入了任務段的選擇子。

2. 任務門描述符

| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 字節 |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 |

任務門的 S=0, TYPE=0101。

在Windows中,典型任務門描述符就是安裝在 IDT[8] 的位置,00008500`00501188.其中有用的就只有標紅的部分。它告訴我們,該任務段的段選擇子是0x0050.

3. 分析 xp 系統的 windows 任務門

  • 實驗

圖1 idt 表中 8 號索引是任務門

上圖可以得出,TSS段的選擇子為 0x0050。現在去查GDT表的0x0050選擇子對應的描述符。

圖2 GDT表中的TSS段描述符

通過分析圖2,可以看到該TSS段描述符的段基址是0x8054a100,段界限是104B. 現在去看看0x8054a100處的TSS段長什么樣。

圖3 Windows XP 中的 TSS段
  • 對齊到TSS段結構體
typedef struct TSS {DWORD link; // 00000000DWORD esp0; // 80547100DWORD ss0; // 00000010DWORD esp1; // 00000000DWORD ss1; // 00000000DWORD esp2; // 00000000DWORD cr3; // 00b67000DWORD eip; // 8053f69eDWORD eflags; // 00000000DWORD eax; // 00000000DWORD ecx; // 00000000DWORD edx; // 00000000DWORD ebx; // 00000000DWORD esp; // 80547100DWORD ebp; // 00000000DWORD esi; // 00000000DWORD es; // 00000023DWORD cs; // 00000008DWORD ss; // 00000010DWORD ds; // 00000023DWORD fs; // 00000030DWORD gs; // 00000000DWORD ldt; // 00000000DWORD io_map; // 20ac0000 } TSS;

4. 總結

CPU提供任務門,是為了方便訪問任務段。在CPU發生二重錯誤的時候,會直接跳到 8 號中斷,而 8 號中斷就是任務門(這是Windows xp 系統設計的任務門),這意味著什么?

一旦進入 8 號中斷,CPU 會切換一堆寄存器,這時候無論發生什么錯誤都沒什么關系,通過一堆寄存器的切換,CPU 保證能跳到一個正確的地方去執行(除非那個地方也被破壞了),緊接著做一些后續處理(比如收集錯誤信息),系統藍屏。

總結

以上是生活随笔為你收集整理的15-任务门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。