Iczelion 的 Win32Asm VxD 彙編教程 (二) (轉)
Iczelion 的 Win32Asm VxD 彙編教程 (二) (轉)[@more@]
虛擬機器管理器(VMM)是 95的實際操作,它建立和維護一個管理虛擬機器的,同時為其他vxd提供許多重要的服務。其中三種重要的服務是:
上面的描述太過簡單。由於被中斷的虛擬機器的時間片可能已過,重分派也許不會馬上執行。VxD程式透過VMM服務如:Set_PM_Int或Hook_V86_Int_Chain來中斷處理。VxD程式不應該直接改動IDT中的中斷入口(除非你很確切的知道將發生的後果)。
副排程器透過主排程器提供的服務來給享有最高優先順序的執行緒分配時間。副排程器給每個執行緒一個時間片。當一個執行緒執行到它的時間片完結時,副排程器就增加下一個執行緒的優先順序,這樣它就會被主排程器選中並執行。
虛擬機器管理器
- 管理
- 中斷處理
- 執行緒排程
記憶體管理
VMM使用 80386或的的記憶體調頁能力來為系統虛擬機器建立一個32位的虛地址空間。它把這個地址空間分為四個不同的部分:- V86區 地址從0H到10FFEFH,這個區屬於當前的虛擬機器。
- 應用程式私有區地址從4MB到2GB。這是應用程式執行的空間。每個Win32的程式都有它自己的2GB(要減去4MB)。
- 應用程式共享區地址從2GB到3GB。這個區域是在虛擬機器內的所有 應用程式共享的。系統DLL(user32,kernel32,gid32)都駐存在這裡。所有的Win16程式也放在這裡,因為它們行為都是不規範的的:它們對記憶體中的其他Win16程式進行讀寫。只有在這個區域裡,Win16程式才可以看到其他所有的Win16程式。記憶體對映和分配給DPMI的記憶體也被存放在這裡。
- 系統共享區地址從3GB到4GB。這裡是VMM和VXM存放的地方。
- 頁面記憶體服務 這種服務分配/管理頁面大小為4KB的記憶體。這是提供的最低階的服務,其他所有的服務都是建立在頁面記憶體服務上的。
- 堆記憶體服務 管理小的記憶體塊。這種高階別的記憶體管理服務建立在頁面記憶體服務的基礎上。
- 表服務管理可用來實行鏈結表的固定大小的記憶體塊。
處理中斷
在保護下,中斷指向中斷描述表(IDT)。VMM透過VxD的幫助監視虛擬機器的IDT。通常VMM處理IDT內幾乎所有的中斷入口。它進行第一級的中斷處理:儲存被中斷程式的狀態,把控制傳送到第二級的中斷處理,第二級的中斷處理通常由各種VxD程式來進行實際的處理。當第二級中斷處理程式完成了它的工作之後,它把控制轉交給重分派程式,由重分派程式來恢復被中斷程式的狀態並從先前被中斷的地方繼續執行。上面的描述太過簡單。由於被中斷的虛擬機器的時間片可能已過,重分派也許不會馬上執行。VxD程式透過VMM服務如:Set_PM_Int或Hook_V86_Int_Chain來中斷處理。VxD程式不應該直接改動IDT中的中斷入口(除非你很確切的知道將發生的後果)。
執行緒排程
VMM使用兩個排程器來在虛擬機器之間實現有優先順序的多執行緒處理:- 主排程器
- 時間片管理器或副排程器
副排程器透過主排程器提供的服務來給享有最高優先順序的執行緒分配時間。副排程器給每個執行緒一個時間片。當一個執行緒執行到它的時間片完結時,副排程器就增加下一個執行緒的優先順序,這樣它就會被主排程器選中並執行。
你可以從Walter Oney's Systems Programming for Windows 95和Windows 95 DDK 文件裡面得到關於這個問題的細節。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991906/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Iczelion 的 Win32Asm VxD 彙編教程 (四) (轉)Win32ASM
- Iczelion 的 Win32Asm VxD 彙編教程 (三) (轉)Win32ASM
- Iczelion 的 Win32Asm VxD 彙編教程 (七) (轉)Win32ASM
- Iczelion 的 Win32Asm VxD 彙編教程 (六) (轉)Win32ASM
- Iczelion 的 Win32Asm VxD 彙編教程 (八) (轉)Win32ASM
- Iczelion 的 Win32Asm VxD 彙編教程 (一) (轉)Win32ASM
- Iczelion 的 Win32Asm VxD 彙編教程 (五) (轉)Win32ASM
- Win32彙編教程二 Win32彙編程式的結構和語法 (轉)Win32
- (譯)win32asm教程-7 (轉)Win32ASM
- (譯)win32asm教程-9 (轉)Win32ASM
- (譯)win32asm教程-8 (轉)Win32ASM
- (譯)win32asm教程-10 (轉)Win32ASM
- (譯)win32asm教程-11 (轉)Win32ASM
- (譯)win32asm教程-5 (轉)Win32ASM
- (譯)win32asm教程-6 (轉)Win32ASM
- iOS彙編入門教程(二)在Xcode工程中嵌入彙編程式碼iOSXCode
- 用 Delphi 編寫 VxD 裝置驅動程式(轉) (轉)
- 基本概念(win32)彙編教程(轉)Win32
- Win32彙編教程十二 管道操作 (轉)Win32
- (譯)win32asm教程-12-完結 (轉)Win32ASM
- Win32彙編教程四 編寫一個簡單的視窗 (轉)Win32
- Win32彙編教程十 定時器的應用 (轉)Win32定時器
- iOS逆向之旅(基礎篇) — 彙編(二) — 彙編下的 IF語句iOS
- iOS彙編入門教程(三)彙編中的 Section 與資料存取iOS
- 彙編跳轉指令
- Win32彙編教程七 控制元件的子類化 (轉)Win32控制元件
- iOS彙編入門教程(一)ARM64彙編基礎iOS
- Win32彙編教程八 圖形介面的操作 (轉)Win32
- win32asm原理 (轉)Win32ASM
- VXD技術漫談(1) (轉)
- C++內嵌彙編 教程1C++
- 51微控制器彙編教程
- Windows 95 VxD C Source Code for VANYDEVD (轉)Windowsdev
- 站在彙編角度深入瞭解 Swift(二)Swift
- iOS彙編基礎(二)暫存器iOS
- 彙編debug程式跳轉指令的方法
- VXD 呼叫 RING3 的 程式碼的方法 (轉)
- 反彙編器-javap.exe(轉)Java