PC机的高级编程技术(自学).pptVIP

  1. 1、本文档共75页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PC机的高级编程技术(自学).ppt

电子发烧友 电子技术论坛 10.3.2 保护模式下对中断或异常的处理 外部中断和处理器异常 软中断 CPL ≤门描述符的DPL ? 是 访问各类门描述符 转移后代码段的DPL≤CPL ? 是 执行0特权级别中的中断处理程序 禁止访问 否 否 CPU根据中断向量表IDT调用相应的VMM异常处理程序,从而切换到0特权级别。 其他各种VxD可以通过安装回调例程来响应处理各种异常和中断,但是它们不能改变中断描述符表IDT中给出的各种VMM异常处理程序。 VMM异常处理程序通过使用CALL指令调用安装的各个回调例程或自身处理异常。 对于硬件中断,VMM则将控制权交给 VPICD(虚拟可编程中断控制器)处理,VPICD就调用其他VxD通过系统服务VPICD_Virtualize_IRQ安装的回调例程处理硬件中断。 一个回调例程要么处理中断和异常,要么忽略该中断,但是它必须使用RET指令返回到VMM异常处理程序。 VMM异常处理程序使用IRET或IRETD指令返回到虚拟机中,虚拟机中的应用程序重新获得控制从而继续执行。 Win32程序 虚拟机 VxD中的回调函数 异常处理程序 VPICD INT x CALL RET IRET IRET 硬件中断 RET 思路: 在中断描述符表中构造一个中断门描述符,使它的DPL=3,这样它就可以被用户级的程序访问,将该中断门描述符的段选择字设为028H,显然该选择字对应的代码段在GDT中,由于其基地址,段界限为FFFFFFFFH,所以现在中断门的偏移量就实际给出了中断处理程序入口的线性地址,我们只要把一个过程作为中断处理程序,这个过程就处在核心级里了。 程序如下: 特殊应用:如何利用保护模式下中断的处理流程设法使自己从用户级转到核心级? #include stdafx.h #include stdio.h #include wtypes.h // wtypes.h定义了DWORDLONG, //DWORD,WORD等数据类型 DWORD _cr0; // 用来保存CR0寄存器的值 void _declspec(naked) newint3(void)// 运行在核心级的 // 中断3处理程序 { _asm { mov eax,cr0 // 这是必须在核心级才能执行的 // 特权指令 mov _cr0,eax } _asm iretd // 中断返回(为什么不是ret?) } int main(int argc, char* argv[]) {DWORDLONG idtr,saveidt; WORD newgate[4]={0x0000,0x0028,0xee00,0x0000}; // 中断门描述符,DPL=3 _asm { sidt idtr // 将IDTR的值存在idtr变量开 // 始的6个字节中 mov ebx,DWORD ptr[idtr+2] // 把IDT的 // 基地址读入EBX寄存器 add ebx,24 // 选择中断3作为进入核心级的 // 入口,中断3的门描述符 // 的地址是IDT基地址加上3*8 // (每个门描述符8个字节) mov esi,ebx lea edi,saveidt movsd // 保存原来中断3的门描述符 movsd // 到saveidt中 lea eax,newint3 mov newgate,ax shr eax,16 mov [newgate+6],ax // 向新的中断描述符中填入 // 中断处理程序的入口偏移量 lea esi,newgate mov edi,ebx movsd // 用新中断描述符在IDT中 movsd // 替换原来的中断3描述符 int 3h // 触发中断3,使程序跳转到 // 0级执行中断处理程序 lea esi,saveidt mov edi,ebx movsd movsd // 恢复原来中断3的门描述符 } printf(cr0=0x%x,_cr0);// 输出结果 return 0; } 10.3.3 虚拟设备驱动程序(VxD)基础 1. VxD的文件结构 VxD的五个段 VxD_CODE 保护模式下的代码段 含设备驱动程序回调例程、服务程序、API接口函数和控制程序。 VxD_DATA 保护模式下的数据段 包含设备描述块、服务表、全局变量等。 VxD_ICOD

文档评论(0)

docinpfd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5212202040000002

1亿VIP精品文档

相关文档