freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c機(jī)的高級(jí)編程技術(shù)(編輯修改稿)

2025-06-20 02:02 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 下 I/O端口訪問(wèn) 執(zhí)行 in, out指令 CPLIOPL? IOPM相關(guān)位 =0? 進(jìn)行 I/O操作 否 否 產(chǎn)生一個(gè)一般保護(hù)異常 是 是 IOPL用以表示指定的 I/O操作處于特權(quán)級(jí)的哪一級(jí)。它在 EFLAGS中。 CPL當(dāng)前段的 I/O優(yōu)先級(jí),它實(shí)際上是 CS段選擇符的第 0~第 1位。 IOPM是對(duì)所有 VM都起作用的權(quán)限機(jī)制,它以位( bit)來(lái)代表每個(gè)端口。某位為 1,則該代表的端口被禁止訪問(wèn);某位為 0,則允許訪問(wèn)該位所代表的端口。 保護(hù)模式下 I/O訪問(wèn) 約定: IOPL為 0。 32 V86模式下 I/O訪問(wèn) 執(zhí)行 in, out指令 IOPM相關(guān)位 =0? 進(jìn)行 I/O操作 否 產(chǎn)生一個(gè)一般保護(hù)異常 是 約定: 忽略 CPL< IOPL的判斷。 訪問(wèn): 符合 保護(hù)模式下的 I/O訪問(wèn)規(guī)則。 如何捕獲一個(gè)端口的訪問(wèn)? 配置 IOPM相關(guān)位 33 VxDs捕獲的 I/O端口 34 三、虛擬機(jī)下 中斷或異常的處理 外部中斷和處理器異常 軟中斷 CPL≤門描述符的 DPL ? 是 訪問(wèn)各類門描述符 轉(zhuǎn)移后代碼段的DPL≤CPL ? 是 執(zhí)行 0特權(quán)級(jí)別中的中斷處理程序 禁止訪問(wèn) 否 否 約定: 外部中斷和異常處理的 DPL為 0; 軟中斷的 DPL不變,為設(shè)定值。 35 特權(quán)切換: 中斷處理程序 特權(quán)級(jí)為 0; 轉(zhuǎn)移后 DPL≤CPL 時(shí),運(yùn)行中斷處理程序。 Win32 程序 虛擬機(jī) VxD中 的回調(diào)函數(shù) VPICD INT x CALL RET IRET 硬件中斷 IRET 異常處理程序 思考: 如何使自己從用戶級(jí)轉(zhuǎn)到核心級(jí)? 利用保護(hù)模式下中斷的處理流程。 36 例: 在 IDT中構(gòu)造一個(gè)中斷門描述符,使它的 DPL=3,這樣它就可以被用戶級(jí)的程序訪問(wèn)( DPL≤CPL),將該中斷門描述符的段選擇字設(shè)為 028H,顯然該選擇字對(duì)應(yīng)的代碼段在 GDT中,由于 OS代碼段基地址為00000000H,段界限為 FFFFFFFFH,所以現(xiàn)在中斷門的偏移量就實(shí)際給出了中斷處理程序入口的線性地址,我們只要把一個(gè)過(guò)程作為中斷處理程序,這個(gè)過(guò)程就處在核心級(jí)里了。 程序如下: 37 include include include // DWORDLONG,DWORD,WORD等數(shù)據(jù)類型 DWORD _cr0; // 用來(lái)保存 CR0寄存器的 值 void _declspec( naked) newint3( void) // 運(yùn)行在核心級(jí)的中斷 3處理程序 { _asm { mov eax,cr0 // 這是必須在核心級(jí)才能執(zhí)行的特權(quán)指令 mov _cr0,eax } _asm iretd // 中斷返回 } int main( int argc, char* argv[]) {DWORDLONG idtr,saveidt; WORD newgate[4]={0x0000,0x0028,0xee00,0x0000}; // 中斷門描述符 _asm { sidt idtr // 將 IDTR的值存在 idtr變量開(kāi)始的 6個(gè)字節(jié)中 mov ebx,DWORD ptr[idtr+2] // 把 IDT的基地址讀入 EBX寄存器 add ebx,24 // 選擇中斷 3作為進(jìn)入核心級(jí)的入口,中斷 3的門描述符 // 的地址是 IDT基地址加上 3*8(每個(gè)門描述符 8個(gè)字節(jié)) mov esi,ebx lea edi,saveidt movsd movsd // 保存原來(lái)中斷 3的門描述符到 saveidt中 lea eax,newint3 轉(zhuǎn)下頁(yè) 38 mov newgate,ax shr eax,16 mov [newgate+6],ax //向新的中斷描述符中填入中斷處理程序的偏移量 lea esi,newgate mov edi,ebx movsd movsd // 用新中斷描述符在 IDT中替換原來(lái)的中斷 3描述符 int 3h // 觸發(fā)中斷 3,使程序跳轉(zhuǎn)到 0級(jí)執(zhí)行中斷處理程序 lea esi,saveidt mov edi,ebx movsd movsd // 恢復(fù)原來(lái)中斷 3的門描述符 } printf( cr0=0x%x,_cr0); // 輸出結(jié)果 return 0; } 返回上頁(yè) P DPL 01110 000 保留 偏移量 15~00 偏移量 31~16 段選擇符 (28H—C,30HD) 31 16 15 14 13 12 8 7 6 5 4 0 中斷門描述符: 39 四、虛擬設(shè)備驅(qū)動(dòng)程序 (VxD)基礎(chǔ) VxD的程序文件結(jié)構(gòu) VxD包含五個(gè)段: VxD_CODE(保護(hù)模式下的代碼段 ):含設(shè)備驅(qū)動(dòng)程序回調(diào)例程、服務(wù)程序、 API接口函數(shù)和控制程序。 VxD_DATA(保護(hù)模式下的數(shù)據(jù)段 ):包含設(shè)備描述塊、服務(wù)表、全局變量等。 VxD_ICODE(保護(hù)模式下的初始化代碼段 ):初始化時(shí)用的服務(wù)程序和過(guò)程,初始化后被丟棄。 VxD_IDATA(保護(hù)模式下的初始化數(shù)據(jù)段 ):初始化時(shí)用的數(shù)據(jù),初始化后被丟棄。 VxD_REAL_INIT(實(shí)模式下的初始化資料與代碼 ):初始化時(shí)調(diào)用,該過(guò)程返回后被丟棄。 每個(gè) VxD裝入主存后產(chǎn)生一個(gè)對(duì)象,每種型號(hào)的設(shè)備共用一個(gè) VxD對(duì)象。 40 VxD的設(shè)備描述符塊 DDB typedef struct tagDDB { DWORD DDB_Next; // VMM使用這一項(xiàng)來(lái)指出下一個(gè) DDB的地址 WORD DDB_SDK_Version; // 建立該 VxD所使用的 SDK/DDK的版本號(hào) WORD DDB_Req_Device_Number; // 設(shè)備 ID。 UNDEFINED_DEVICE_ID // 表示不使用唯一 ID BYTE DDB_Dev_Major_Version; // VxD的主版本號(hào) BYTE DDB_Dev_Minor_Version; // VxD的次版本號(hào) WORD DDB_Flags; // DDB標(biāo)志位 BYTE DDB_Name[8]; // VxD的名字 ,不足 8個(gè)字節(jié)必須以空格補(bǔ)滿 DWORD DDB_ Init_Order; // 指定 VxD的初始化順序,如果沒(méi)有特別的初 // 始化要求就使用 UNDEFINED_INIT_ORDER DWORD DDB_Control_Proc; // 設(shè)備控制程序的地址 DWORD DDB_V86_API_Proc; // V86API程序的入口地址 DWORD DDB_PM_API_Proc; // 保護(hù)模式 API程序的入口地址 DWORD DDB_V86_API_CSIP // V86入口點(diǎn)的 CS: IP DWORD DDB_PM_API_CSIP; // 保護(hù)模式入口點(diǎn)的 CS: IP DWORD DDB_Reference_Data; // 實(shí)模式初始化代碼設(shè)置的參考資料 DWORD DDB_VxD_Service_Table_Ptr; // VxD服務(wù)表的地址 DWORD DDB_VxD_Service_Table_Size; // VxD服務(wù)表中提供的 VxD服務(wù)的 // 數(shù)目 } DDB; 每個(gè)設(shè)備(含同型號(hào)設(shè)備)均有一個(gè) DDB。 41 VxD的加載與卸載 動(dòng)態(tài)加載: API函數(shù) 發(fā)的消息 功能 CreateFile Sys_Dynamic_Device_Init 加載 VxD DeviceIOControl W32_DeviceIOControl 與 VxD進(jìn)行交互處理 CloseHandle Sys_Dynamic_Device_Exit 卸載 VxD hDevice=CreateFile( \\\\.\\, 0, 0, 0, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0); DeviceIoControl( hDevice,DIOC_MY_IO, NULL, 0, NULL, 0, NULL,NULL); CloseHandle( hDevice); 加載: 使設(shè)備與 Win32 API掛鉤。 42 靜態(tài)加載: 43 VMM與 VxD間的消息 Win32與 VxD間的通信 Win32 應(yīng)用程序 調(diào)用指令 回調(diào)函數(shù) VxD DeviceIoControl() ()給應(yīng)用程序消息 ()給應(yīng)用線程事件 Ring0級(jí)事件給應(yīng)用程序 44 第四節(jié) Windows 2021/XP設(shè)備驅(qū)動(dòng)程序設(shè)計(jì) 一、 Windows 2021/XP的設(shè)備驅(qū)動(dòng)程序 虛擬設(shè)備 驅(qū)動(dòng)程序( VDD) 內(nèi)核模式 驅(qū)動(dòng)程序 文件系統(tǒng) 驅(qū)動(dòng)程序 保留設(shè)備 驅(qū)動(dòng)程序 PnP 驅(qū)動(dòng)程序 顯示 驅(qū)動(dòng)程序 WDM驅(qū)動(dòng)程序 類驅(qū)動(dòng)程序 迷你驅(qū)動(dòng)程序 45 虛擬設(shè)備驅(qū)動(dòng)程序 (Virtual Device Driver, VDD)可使 DOS應(yīng)用程序訪問(wèn) x86平臺(tái)上的硬件,也可支持Windows 9x下的對(duì)端口訪問(wèn)。 WDM驅(qū)動(dòng)程序 是一種遵循電源管理協(xié)議并能在 Win98和 Win2021上實(shí)現(xiàn)源代碼級(jí)兼容的 PnP驅(qū)動(dòng)程序。 WDM驅(qū)動(dòng)程序又可分為類驅(qū)動(dòng)程序(管理已定義類的設(shè)備)和迷你驅(qū)動(dòng)程序(提供廠商專有的支持)。 顯示驅(qū)動(dòng)程序 是用于顯示和打印設(shè)備的內(nèi)核模式驅(qū)動(dòng)程序。 文件系統(tǒng)驅(qū)動(dòng)程序 在本地磁盤或網(wǎng)絡(luò)上實(shí)現(xiàn)標(biāo)準(zhǔn) PC文件系統(tǒng)模型 (含多層次目錄結(jié)構(gòu)和命名文件概念 )。 保留設(shè)備驅(qū)動(dòng)程序 主要包括 Windows NT早期版本的驅(qū)動(dòng)程序,它直接控制一個(gè)硬設(shè)備而不用其他驅(qū)動(dòng)程序幫助,可以不做修改地在 Windows 2021中運(yùn)行。 46 二、 WDM的基本結(jié)構(gòu) 設(shè)備對(duì)象及設(shè)備對(duì)象棧 設(shè)備對(duì)象 :系統(tǒng)為幫助軟件管理硬件而創(chuàng)建的一個(gè)數(shù)據(jù)結(jié)構(gòu)(包括 PDO、 FDO、 FiDO) 。 硬件僅指某功能設(shè)備,多功能設(shè)備有幾個(gè)設(shè)備對(duì)象。 PDO(物理設(shè)備對(duì)象 ):設(shè)備對(duì)
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1