80386保護模式簡介(轉)
80386保護模式簡介(轉)[@more@] 在保護模式下有很多新的名詞 ,包含 GDT.LDT.IDT 以及 CR0-CR3 ,筆者保護 模式並不清楚 ,所以底下資料可能有錯誤。這裡使用大量的線性記憶體觀念 ,請您 一定要從頭往後看 ,否則很可能會看不懂 ,且必須懂線性記憶體計算方式。 【 GDT 介紹 】 在真真實模式下每個區段都等於64K ,可是保護模式下每個區段的大小卻是可變動 的 ,每個區段有多大呢 ,就是由 GDT 來決定。 您可以用 SGDT CS:[BX] 的方式將 GDT 的值讀出 ,它的長度為 6 BYTE ,底下 是筆者寫的小程式讀出。 XXXX:0000 FF 0F 00 20 C0 00 ^^^^^^^^^^^GDT表所在的線性記憶體位址 ^^^^^GDT表長度+1 將此表資料讀出來. X:00C02000 00 00 00 00 00 00 00 00-FF FF 00 A0 C2 9B 40 00 ........... B.@. X:00C02010 FF FF B0 DD 01 93 40 00-FF FF E0 B3 00 9A 00 00 ..0]..@...`3.... X:00C02020 FF FF E0 B3 00 93 00 00-00 00 00 20 C1 82 80 00 ..`3....... A... X:00C02030 00 00 00 20 C1 93 C0 00-00 00 00 20 C0 93 C0 00 ... A.@.... @.@. X:00C02040 00 00 00 00 00 92 40 00-FF FF 00 80 0B 92 40 00 ......@.......@. 它所代表的意思是如下圖所示∶(每組 8 byte) ┌──────────────────────┐ 1│ Limit bit 0-15 │ 0 byte ├──────────────────────┤ 3│ Base bit 0-15 │ 2 ├──────────┬───────────┤ 5│ 存取權 │ Base bit 16-23 │ 4 ├──────────┼───────────┤ 7│ Base bit 24-31 │G│..│limit bit 16-19│ 6 └──────────┴───────────┘ "G"代表 Limit 的單位是 Byte 或 PAGE(4K) 所以.... #0000 Segment not present. #0008 Base=00C2A000 Limit=0000FFFF Flags=9B USE32 Byte granularity #0010 Base=0001DDB0 Limit=0000FFFF Flags=93 USE32 Byte granularity #0018 Base=0000B3E0 Limit=0000FFFF Flags=9A USE16 Byte granularity #0020 Base=0000B3E0 Limit=0000FFFF Flags=93 USE16 Byte granularity #0028 Base=00C12000 Limit=00000000 Flags=82 Page granularity #0030 Base=00C12000 Limit=00000000 Flags=93 USE32 Page granularity #0038 Base=00C02000 Limit=00000000 Flags=93 USE32 Page granularity #0040 Base=00000000 Limit=00000000 Flags=92 USE32 Byte granularity #0048 Base=000B8000 Limit=0000FFFF Flags=92 USE32 Byte granularity #0050 Base=0001F56C Limit=000007FF Flags=92 USE32 Byte granularity #0058 Base=00000000 Limit=00000144 Flags=92 USE32 Page granularity #0060 Base=00000000 Limit=00000144 Flags=93 USE32 Page granularity #0068 Base=00127F48 Limit=0000C32F Flags=9B USE16 Byte granularity #0070 Base=00134278 Limit=000028F7 Flags=93 USE16 Byte granularity #0078 Base=00000000 Limit=00000000 Flags=92 USE16 Byte granularity ^^^^^Selector ^^存取權 Base 就是指這個Secector:00000000對應到線性記憶體的何處 ,也就是說將線性記 憶體從 Base 所指的地方開始長度為 Limit ,剪下來變成一個獨立的區段 ,如果您 在該區段想看超過 LIMIT 長度的記憶體 ,則會發生保護模式錯誤...應用程式可攔 截所發生的中斷適當的加以處理。 注意 ,Limit的單位可以是 byte ,也可以是page(4k) ,由 "G" 是否為 1 來決定 至於 Selector 的數值我猜想應該是被標上 8 的倍數吧 ,因為很多書都是如此介 紹它。 -------------------------------------------------------------------------- 【 LDT 介紹 】 上面介紹了 GDT 可以設定很多個Secector ,而 LDT 則是在這些被定義出來 的Selector中再切割出更小的單元。也就是說 LDT 的資料長度只有 2 BYTE ,這 個值直接就是指 Selector。 ※這個命令必需在最高權力下才能執行 ,所以筆者使用 386DEBUG 來執行 ,在傳 統 Real Mode/V86 都不能執行。 C:>386debug 386debug.exp (改過的.exp檔) 000C:0002743C 660F0007 SLDT [EDI] -T -D EDI 0014:00000000 28 00 根據 GDT 的資料查表得到下表 ,但是由於 0028 這段落禁止觀看 ,所以我改看0030 的段落 ,因為它的 Base 是一樣的。 #0028 Base=00C12000 Limit=00000000 Flags=82 Page granularity #0030 Base=00C12000 Limit=00000000 Flags=93 USE32 Page granularity -D 30:0 0030:00000000 FF 00 F0 CE 09 92 40 00-31 00 00 00 CA 9B C0 00 ..pN..@.1...J.@. 0030:00000010 31 00 00 00 CA 93 C0 00-FF FF 00 80 0B 92 40 00 1...J.@.......@. 0030:00000020 FF 00 F0 CE 09 92 40 00-4D 00 90 CE 09 92 40 00 ..pN..@.M..N..@. 0030:00000030 44 01 00 00 00 93 C0 00-00 00 00 00 00 92 40 00 D.....@.......@. 0030:00000040 FF FF 00 80 0B 92 40 00-00 00 00 00 00 92 40 00 ......@.......@. 0030:00000050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0030:00000060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0030:00000070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ -DL 0 #0004 Base=0009CEF0 Limit=000000FF Flags=92 USE32 Byte granularity #000C Base=00CA0000 Limit=00000031 Flags=9B USE32 Page granularity #0014 Base=00CA0000 Limit=00000031 Flags=93 USE32 Page granularity #001C Base=000B8000 Limit=0000FFFF Flags=92 USE32 Byte granularity #0024 Base=0009CEF0 Limit=000000FF Flags=92 USE32 Byte granularity #002C Base=0009CE90 Limit=0000004D Flags=92 USE32 Byte granularity #0034 Base=00000000 Limit=00000144 Flags=93 USE32 Page granularity #003C Base=00000000 Limit=00000000 Flags=92 USE32 Byte granularity #0044 Base=000B8000 Limit=0000FFFF Flags=92 USE32 Byte granularity #004C Base=00000000 Limit=00000000 Flags=92 USE32 Byte granularity #0054 Segment not present. #005C Segment not present. #0064 Segment not present. #006C Segment not present. #0074 Segment not present. #007C Segment not present. -------------------------------------------------------------------------- 【 IDT 介紹 】 在以往中斷向量表都是用 4 byte 來表示 ,但是在保護模式下則由 8 byte 表 示 ,至於那幾個 byte 表示什麼 ,筆者還未搞懂 ,底下只弄懂幾個。 C:>386debug 386debug.exp (改過的.exp檔) 000C:00027434 660F010F SIDT [EDI] -D EDI 0014:00000000 FF 07 6C F5 01 00 .. ..-.. .. .. .. .. .. .. .. ^^^^^^^^^^^線性記憶體位址 ^^^^^長+1 因為該線性記憶體已對映到 50:0 #0050 Base=0001F56C Limit=000007FF Flags=92 USE32 Byte granularity 所以: 0050:00000000 00 34 08 00 00 EE 00 00-0A 34 08 00 00 EE 00 00 .4...n...4...n.. 0050:00000010 14 34 08 00 00 EE 00 00-1E 34 08 00 00 EE 00 00 .4...n...4...n.. 0050:00000020 28 34 08 00 00 EE 00 00-32 34 08 00 00 EE 00 00 (4...n..24...n.. 0050:00000030 3C 34 08 00 00 EE 00 00-6C 16 C8 0F 00 8E 00 00 <4...n..F4...n.. 0050:00000040 50 34 08 00 00 EE 00 00-5A 34 08 00 00 EE 00 00 P4...n..Z4...n.. 0050:00000050 64 34 08 00 00 EE 0
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-957201/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 80386學習(二) 80386特權級保護
- Windows的保護模式 (轉)Windows模式
- 保護模式知識(三) (轉)模式
- 保護模式模式
- DG的保護模式模式
- 真實模式和保護模式模式
- 保護模式下的特權級檢查 (轉)模式
- 保護性暫停模式模式
- dataguard三種保護模式模式
- DataGuard切換保護模式模式
- 保護模式:段機制模式
- 0gR2最大保護模式DataGuard建立 (轉載)模式
- 保護模式篇——PAE分頁模式
- 破解Word檔案密碼保護的簡單方法(轉)密碼
- 保護模式篇——總結與提升模式
- 【DG】DG的3種保護模式模式
- 圖解CPU的真實模式與保護模式圖解模式
- 幾種設計模式簡介(轉載)設計模式
- 【轉載】軟體開發模式簡介模式
- 6 Oracle Data Guard Protection Modes 保護模式Oracle模式
- DG學習筆記(7)_保護模式筆記模式
- Linux從頭學08:Linux 是如何保護核心程式碼的?【從真實模式到保護模式】Linux模式
- 呼叫系統螢幕保護 (轉)
- 智取螢幕保護密碼(轉)密碼
- x64 番外篇——保護模式相關模式
- ORACLE10G DG中資料保護模式Oracle模式
- 建立 oracle data gurd 以及三種保護模式Oracle模式
- 【DataGuard】Oracle DataGuard 資料保護模式切換Oracle模式
- Data Guard 的3種資料保護模式模式
- 10gR2最大保護模式DataGuard建立模式
- 建立DATAGUARD最大保護模式-測試手記模式
- 防火牆模式工作模式簡介防火牆模式
- win10桌面眼睛保護模式怎麼開啟_win10設定電腦眼睛保護模式步驟Win10模式
- 橋樑模式簡介模式
- Mac簡單時鐘螢幕保護程式Mac
- 常見dotNet加密保護工具分析介紹加密
- 使用Broker管理Data Guard——停用、改保護模式等模式
- 11g dataguard 型別、保護模式、服務型別模式