PC机的高级编程技术(自学).ppt
http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术第第10章章PC机的高级编程技术机的高级编程技术(自学)(自学)1http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术10.1PC机机环境下软件对接口的访问层次环境下软件对接口的访问层次裸机裸机BIOS直接访问直接访问操作系统操作系统驱动程序驱动程序驱动程序驱动程序间接访问间接访问应用程序应用程序2http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术1.直接访问层次直接访问层次特点特点:可以直接进行内存和端口的访问,也可以:可以直接进行内存和端口的访问,也可以自行决定是否在实模式和保护模式间切换。自行决定是否在实模式和保护模式间切换。通常所有的端口和内存都是对程序员开放通常所有的端口和内存都是对程序员开放的。的。工具工具:汇编语言或:汇编语言或C语言。语言。应用应用:BIOS都是基于这种低级层次用汇编来编写都是基于这种低级层次用汇编来编写的。驱动程序也有使用这种方法的。的。驱动程序也有使用这种方法的。优点优点:能够编写速度最快,占用空间最小的有效:能够编写速度最快,占用空间最小的有效代码。代码。缺点缺点:需要对硬件和接口有很熟悉的了解。:需要对硬件和接口有很熟悉的了解。要会汇编,或熟练使用要会汇编,或熟练使用C语言的指针。语言的指针。不利于增加对新设备的控制。不利于增加对新设备的控制。3http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术2.BIOS访问层次访问层次特点特点:通过:通过BIOS提供的功能调用间接地对内存提供的功能调用间接地对内存或端口访问,从而控制硬件。或端口访问,从而控制硬件。工具工具:汇编语言或:汇编语言或C语言。语言。应用应用:驱动程序有些会使用这些功能调用。需要:驱动程序有些会使用这些功能调用。需要获得高效率的应用程序也采用这种方法。获得高效率的应用程序也采用这种方法。优点优点:能够编写速度较快的有效代码。:能够编写速度较快的有效代码。可以不需要编写直接对硬件进行控制的代可以不需要编写直接对硬件进行控制的代码。码。缺点缺点:需要对底层信号有所了解。:需要对底层信号有所了解。增加对新设备的控制不是很方便,但好于增加对新设备的控制不是很方便,但好于低级层次。低级层次。4http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术3.驱动程序层次驱动程序层次特点特点:使用:使用BIOS功能调用和直接内存访问的方功能调用和直接内存访问的方法编写符合特定操作系统管理规范的设备法编写符合特定操作系统管理规范的设备驱动程序。驱动程序。工具工具:VC+与与DDK开发包,或第三方开发工具开发包,或第三方开发工具如如DriverStudio。应用应用:在操作系统层面上的设备控制,并为应用:在操作系统层面上的设备控制,并为应用程序提供程序提供API支持。支持。优点优点:既控制硬件,又保证操作系统的完整与安:既控制硬件,又保证操作系统的完整与安全。全。缺点缺点:需要对底层信号有所了解。:需要对底层信号有所了解。需要对操作系统的各个管理模块有深入的需要对操作系统的各个管理模块有深入的了解。了解。5http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术4.应用层次应用层次特点特点:使用操作系统各种驱动程序所提供的功能:使用操作系统各种驱动程序所提供的功能调用或调用或API函数间接对硬件或内存进行访函数间接对硬件或内存进行访问。问。工具工具:VC+、Delphi、Java等。等。应用应用:编写面向终端用户的各类应用程序。:编写面向终端用户的各类应用程序。优点优点:无需对硬件控制有太多了解,只需完成应:无需对硬件控制有太多了解,只需完成应用层面的工作就可以用层面的工作就可以,而且还保证操作系,而且还保证操作系统的完整与安全。统的完整与安全。缺点缺点:需要了解大量的:需要了解大量的API和功能调用函数的功和功能调用函数的功能。能。由于是间接调用,所以代码的效率和编译由于是间接调用,所以代码的效率和编译系统有很大的关系。系统有很大的关系。6http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术16位段地址位段地址16位段内偏移位段内偏移:16位段地址位段地址16位段内偏移位段内偏移(左移四位)(左移四位)+20位物理地址位物理地址=6417H 0100H6417H10H+0100H=64170H+0100H=64270H采用了内存分段的办法,内存分为若干段,段的大小采用了内存分段的办法,内存分为若干段,段的大小根据需要决定,最大为根据需要决定,最大为64KB10.2.1实地址模式的存储管理(同实地址模式的存储管理(同PC/XT)10.2Pentium4的内存管理的内存管理接口直接访问接口直接访问7http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术0000000A0000100000110000FFFFFF640KB常规内存常规内存384KB高端内存高端内存64KB高内存区高内存区14095MB扩展内存扩展内存存放用户程序和存放用户程序和存放用户程序和存放用户程序和DOSDOS驻留部分驻留部分驻留部分驻留部分存放显存、网卡和部分存放显存、网卡和部分存放显存、网卡和部分存放显存、网卡和部分用户的用户的用户的用户的DOSDOS驱动程序和驱动程序和驱动程序和驱动程序和BIOSBIOS存放部分存放部分存放部分存放部分DOSDOS驻留程序驻留程序驻留程序驻留程序大于大于大于大于1M1M以上的以上的以上的以上的 扩展内扩展内扩展内扩展内存,存,存,存,DOSDOS下不能直接访下不能直接访下不能直接访下不能直接访问,需要用问,需要用问,需要用问,需要用XMSXMS规范使规范使规范使规范使用。可利用用。可利用用。可利用用。可利用DOSDOS调用或调用或调用或调用或BIOSBIOS调用来使用。调用来使用。调用来使用。调用来使用。8http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术10.2.2保护模式下使用的系统地址寄存器保护模式下使用的系统地址寄存器 GDTR48GDTR48位的全局描述符表寄存器位的全局描述符表寄存器位的全局描述符表寄存器位的全局描述符表寄存器 全局描述符表全局描述符表32位线性地址位线性地址16位界限值位界限值 IDTR48IDTR48位的中断描述符表寄存器位的中断描述符表寄存器位的中断描述符表寄存器位的中断描述符表寄存器 中断描述符表中断描述符表32位线性地址位线性地址16位界限值位界限值 TR16TR16位的任务状态段寄存器位的任务状态段寄存器位的任务状态段寄存器位的任务状态段寄存器 TSS的的16位选择字位选择字 LDTR16LDTR16位的局部描述符选择字寄存器位的局部描述符选择字寄存器位的局部描述符选择字寄存器位的局部描述符选择字寄存器 LDT的的16位选择字位选择字9http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术10.2.3保护模式下保护模式下Pentium4的段式存储管理的段式存储管理1.段式管理的地址变换段式管理的地址变换段寄存器的段寄存器的152位位偏移量偏移量4532310段描述符段描述符段表段表32位线性地址位线性地址物理物理地址地址逻辑逻辑地址地址段基址段基址PentiumPentium系列的虚拟地址空间是系列的虚拟地址空间是系列的虚拟地址空间是系列的虚拟地址空间是2 2464664TB64TB。10http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术2.段描述符段描述符D7D0段界限段界限70段界限段界限158基址基址70基址基址158基址基址2316基址基址3124TYPESAVLDPLPGD/B 0段界限段界限19160123456711http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术D7D0AVLG D/B0段界限段界限1916用户的操作系统可用位用户的操作系统可用位D/B位位代码段代码段(D位位)D=1使用使用32位操作系统位操作系统和和32位寻址方式位寻址方式D=0使用使用16位操作系统位操作系统和和16位寻址方式位寻址方式数据段数据段(B位位)B=1使用使用ESP寄存器,上寄存器,上限为限为FFFFFFFFHB=0使用使用SP寄存器,上寄存器,上限为限为FFFFHG=0段长以段长以1字节为单位字节为单位G=1段长以段长以4K字节为单位字节为单位D/B位位粒度位粒度位12http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术AWREDCE=0E=1S=1DPLPD7D0存在位存在位特权位特权位S=1是非系统段是非系统段S=0是系统描述符是系统描述符代码段标志代码段标志数据段标志数据段标志兼容位兼容位可读位可读位访问位访问位扩展方向位扩展方向位可写位可写位非非系统段中的第系统段中的第5字节字节可执行位可执行位13http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术系统描述符中的系统描述符中的TYPE14http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术RPLTi选择符(段寄存器)选择符(段寄存器)15210索引索引Ti=1Ti=00101LDTLDTLDTGDT基址基址界限界限选择符选择符基址基址界限界限LDTRGDTR2215http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术#includestdafx.h#include#include/wtypes.hwtypes.h定义了定义了定义了定义了WORDLONG,WORDLONG,/DWORD,WORD/DWORD,WORD等数据类型等数据类型等数据类型等数据类型DWORDLONGgdtr,savegdt;/下面是下面是下面是下面是GDTGDT中将创建的数据段描述符表中将创建的数据段描述符表中将创建的数据段描述符表中将创建的数据段描述符表,基地址基地址基地址基地址0X00000F00,0X00000F00,/段界限为段界限为段界限为段界限为0XFFFF,0XFFFF,优先级为优先级为优先级为优先级为3 3的在内存中的可写数据段的在内存中的可写数据段的在内存中的可写数据段的在内存中的可写数据段WORDdescriptor4=0 xFFFF,0X0F00,0XF200,0X0040;intresult10;intmain(intargc,char*argv)_asmpushebpsgdtgdtr/将将将将GDTRGDTR寄存器的内容读取到寄存器的内容读取到寄存器的内容读取到寄存器的内容读取到/gdtrgdtr开始的开始的开始的开始的6 6个字节中,其中个字节中,其中个字节中,其中个字节中,其中/前两个字节给出前两个字节给出前两个字节给出前两个字节给出GDTGDT的界限值的界限值的界限值的界限值,/高高高高4 4个字节给出个字节给出个字节给出个字节给出GDTGDT的基地址的基地址的基地址的基地址16http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术movebp,dwordptrgdtr+2/将将将将gdtgdt的基的基的基的基/地址读到地址读到地址读到地址读到EBPEBP中中中中addebp,70h/我们选择我们选择我们选择我们选择70H70H偏移下的段描述偏移下的段描述偏移下的段描述偏移下的段描述/符(符(符(符(GDTGDT中第中第中第中第1414个描述符)个描述符)个描述符)个描述符)leaedi,savegdtmovesi,ebpmovsd/以上以上以上以上4 4条指令保存原来在条指令保存原来在条指令保存原来在条指令保存原来在70H70H偏移上偏移上偏移上偏移上movsd/的描述符的描述符的描述符的描述符movedi,ebpleaesi,descriptor;movsd/把我们的数据段描述符装入把我们的数据段描述符装入把我们的数据段描述符装入把我们的数据段描述符装入70H70Hmovsd/偏移上偏移上偏移上偏移上pushesmovax,0073h/选择字为描述符偏移选择字为描述符偏移选择字为描述符偏移选择字为描述符偏移70H70H拼接上拼接上拼接上拼接上/低低低低3 3位控制位元位控制位元位控制位元位控制位元,其中其中其中其中TiTi为为为为0,0,表表表表/示访问示访问示访问示访问GDT,RPLGDT,RPL为为为为11,11,为为为为3 3级优级优级优级优/先级先级先级先级,所以就为所以就为所以就为所以就为73H73H 17http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术moves,ax/ES/ES装入选择字装入选择字装入选择字装入选择字73H73Hleaedi,result/将存放输出结果的变量将存放输出结果的变量将存放输出结果的变量将存放输出结果的变量/的地址放在的地址放在的地址放在的地址放在EDIEDI中中中中moveax,1movebx,1_asmmovcx,10a1:moves:eax,eaxaddeax,4loopa1/上面上面上面上面4 4条指令将向物理地址条指令将向物理地址条指令将向物理地址条指令将向物理地址/0X00000F000X00000F00处写处写处写处写1010个双字个双字个双字个双字_asmmovcx,10a2:moveax,es:ebxmovedi,eax18http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术addebx,4addedi,4loopa2/以上从物理地址以上从物理地址以上从物理地址以上从物理地址0X00000F000X00000F00/处依次读出处依次读出处依次读出处依次读出1010个数据存放在个数据存放在个数据存放在个数据存放在/result/result数组中数组中数组中数组中_asmpopespopebpprintf(result=););for(inti=0;i10;i+)printf(%d,resulti););/输出结果输出结果输出结果输出结果return0;19http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术10.2.4保护模式下保护模式下Pentium4的虚拟页式存储管理的虚拟页式存储管理主存主存页框页框页面页面程序程序1程序程序2程序程序320http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术PGEPCE83176543210MCEPAE PSEDE TSDVMEPVI保留,缺省为全保留,缺省为全0CR4PAEPSE物理地址位数物理地址位数页面大小页面大小0032位位4KB0132位位4KB/4MB1036位位4KB1136位位4KB/2MB21http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术4KB4KB分页方式分页方式分页方式分页方式3112119876543210PWTPCD页表基地址页表基地址3112PRWUSAVLAD0页目页目录项录项PWTPCD页框基地址页框基地址3112PRWUSAVLAD页表页表项项3112119876543210P=P=出现位,出现位,出现位,出现位,US=US=用户用户用户用户/监督位,监督位,监督位,监督位,PCDPCD是页是页是页是页CacheCache禁止,禁止,禁止,禁止,D=Cache“D=Cache“脏脏脏脏”位,位,位,位,RW=RW=读读读读/写位,写位,写位,写位,PWT=PWT=页写贯穿位,页写贯穿位,页写贯穿位,页写贯穿位,A=A=访问位,访问位,访问位,访问位,AVL=AVL=用户的操作系统可用用户的操作系统可用用户的操作系统可用用户的操作系统可用位。而第位。而第位。而第位。而第7 7位(位(位(位(PSPS)在在在在4KB4KB分页中为分页中为分页中为分页中为0 0页目录页目录32位线位线性地址性地址页目录项号页目录项号页面号页面号偏移偏移CR332位物理地址位物理地址31222112110页表页表低低12位位高高20位位22http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术4MB4MB分页方式分页方式分页方式分页方式3122876543210PWTPCD页框基地址页框基地址3122PRWUSAD1页目录项页目录项32位线性位线性地址地址页目录项号页目录项号偏移偏移CR332位物理位物理地址地址3122210页目录页目录低低22位位高高10位位23http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术31543210PWTPCD32字节对齐的字节对齐的PDPT基地址基地址CR3寄存器寄存器63363512116543210PWTPCDPAVLPDPT项项4KB对齐的页目录基地址对齐的页目录基地址(高(高24位)位)63363512119876543210PWTPCD4KB对齐的页表基地址对齐的页表基地址PRWUSAVLA0页目录项页目录项PWTPCD4KB对齐的页框基地址对齐的页框基地址PRWUSAVLAD页表项页表项633635121198765432100GPentiumIII36PentiumIII36位地址下的位地址下的位地址下的位地址下的4KB4KB分页方式地址转换分页方式地址转换分页方式地址转换分页方式地址转换 32位线性地址位线性地址页目录项号页目录项号页面号页面号偏移偏移CR336位物理地址位物理地址313029212012110页目录页目录页表页表PDPT项号项号页目录指针表页目录指针表464位位51264位位51264位位低低12位位高高24位位24http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术32位线性地址位线性地址页目录项号页目录项号偏移偏移CR336位物理地址位物理地址31302921200页目录页目录PDPT项号项号页目录指针表页目录指针表464位位51264位位页目录项页目录项PWTPCD2MB对齐的页框基地址对齐的页框基地址PRWUSAVLAD6336352120121198765432101G低低21位位高高15位位PentiumIII36PentiumIII36位地址下的位地址下的位地址下的位地址下的2MB2MB分页方式地址转换分页方式地址转换分页方式地址转换分页方式地址转换 25http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术计算机底层硬件计算机底层硬件操作系统内核与操作系统内核与VxD操作系统提供的接口操作系统提供的接口应用软件应用软件10.3.1虚拟机与虚拟机与VxD的引入的引入特权级特权级3特权级特权级010.3Windows9x驱动程序编写驱动程序编写26http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术Windows9xSYSVMWin16地址空间地址空间Win16程序程序Win16程序程序Win16程序程序Win16程序程序Win32程序程序Win32地址空间地址空间Win32程序程序Win32地址空间地址空间DOSVMDOS程序程序DOSVMDOS程序程序27http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术10.3.1保护模式下的保护模式下的I/O端口访问端口访问执行执行in,out指令指令CPLIOPL?IOPM相关位相关位=0?进行进行I/O操作操作否否否否产生一个一产生一个一般保护异常般保护异常是是是是IOPMIOPM是对所有是对所有VM都都起作用的权限机制,它以起作用的权限机制,它以位(位(bit)来代表每个端来代表每个端口。某位为口。某位为1,则该代表,则该代表的端口被禁止访问;某位的端口被禁止访问;某位为为0;则允许访问该位所;则允许访问该位所代表的端口。代表的端口。IOPLIOPL用以表示指定的用以表示指定的I/O操作处操作处于特权级的哪一级。它在于特权级的哪一级。它在EFLAGS中。中。CPLCPL当前段的当前段的I/O优先级,它实优先级,它实际上是际上是CS段选择符的第段选择符的第0第第1位。位。28http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术V86模式下(模式下(DOSVM)的)的I/O端口访问端口访问执行执行in,out指令指令IOPM相关位相关位=0?进行进行I/O操作操作否否产生一个一产生一个一般保护异常般保护异常是是如何捕获一个端口的访问?如何捕获一个端口的访问?如何捕获一个端口的访问?如何捕获一个端口的访问?29http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术30http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术10.3.2保护模式下对中断或异常的处理保护模式下对中断或异常的处理外部中断和处理器异常外部中断和处理器异常软中断软中断CPL门描述门描述符的符的DPL?是是访问各类门描述符访问各类门描述符转移后代码段转移后代码段的的DPLCPL?是是执行执行0特权级别中的中断处理程序特权级别中的中断处理程序禁止访问禁止访问否否否否31http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术CPU根据中断向量表根据中断向量表IDT调用相应的调用相应的VMM异常处异常处理程序,从而切换到理程序,从而切换到0特权级别。特权级别。其他各种其他各种其他各种其他各种VxDVxD可以通过安装回调例程来响应处理各可以通过安装回调例程来响应处理各可以通过安装回调例程来响应处理各可以通过安装回调例程来响应处理各种异常和中断种异常和中断种异常和中断种异常和中断,但是它们不能改变中断描述符表但是它们不能改变中断描述符表IDT中中给出的各种给出的各种VMM异常处理程序。异常处理程序。VMMVMM异常处理程序通过使用异常处理程序通过使用异常处理程序通过使用异常处理程序通过使用CALLCALL指令调用安装指令调用安装指令调用安装指令调用安装的各个回调例程的各个回调例程的各个回调例程的各个回调例程或自身处理异常。或自身处理异常。对于硬件中断,对于硬件中断,VMM则将控制权交给则将控制权交给VPICD(虚拟虚拟可编程中断控制器)处理,可编程中断控制器)处理,VPICD就调用其他就调用其他VxD通通过系统服务过系统服务VPICD_Virtualize_IRQ安装的回调例程处安装的回调例程处理硬件中断。理硬件中断。一个回调例程要么处理中断和异常,要么忽略该中一个回调例程要么处理中断和异常,要么忽略该中断,但是断,但是它必须使用它必须使用它必须使用它必须使用RETRET指令返回到指令返回到VMM异常处理程异常处理程序。序。32http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术VMM异常处理程序使用异常处理程序使用IRET或或IRETD指令返回到指令返回到虚拟机中,虚拟机中的应用程序重新获得控制从而继虚拟机中,虚拟机中的应用程序重新获得控制从而继续执行。续执行。Win32程序程序虚拟机虚拟机VxD中中的回调的回调函数函数异常处异常处理程序理程序VPICDINTxCALLRETIRETIRET硬件中断硬件中断RET33http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术思路:思路:在中断描述符表中在中断描述符表中构造一个中断门描述符,使它的构造一个中断门描述符,使它的构造一个中断门描述符,使它的构造一个中断门描述符,使它的DPL=3DPL=3,这样它就可以被用户级的程序访问,将该中这样它就可以被用户级的程序访问,将该中断门描述符的段选择字设为断门描述符的段选择字设为028H,显然该选择字对应显然该选择字对应的代码段在的代码段在GDT中,由于其基地址为中,由于其基地址为00000000H,段段界限为界限为FFFFFFFFH,所以现在中断门的偏移量就实所以现在中断门的偏移量就实际给出了中断处理程序入口的线性地址,我们只要把际给出了中断处理程序入口的线性地址,我们只要把一个过程作为中断处理程序,这个过程就处在核心级一个过程作为中断处理程序,这个过程就处在核心级里了。里了。程序如下:程序如下:特殊应用:如何利用保护模式下中断的处理特殊应用:如何利用保护模式下中断的处理流程设法使自己从用户级转到核心级?流程设法使自己从用户级转到核心级?34http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术#includestdafx.h#include#include/wtypes.hwtypes.h定义了定义了定义了定义了DWORDLONG,DWORDLONG,/DWORD,WORD/DWORD,WORD等数据类型等数据类型等数据类型等数据类型DWORD_cr0;/用来保存用来保存用来保存用来保存CR0CR0寄存器的值寄存器的值寄存器的值寄存器的值void_declspec(naked)newint3(void)/运行在核心级的运行在核心级的运行在核心级的运行在核心级的/中断中断中断中断3 3处理程序处理程序处理程序处理程序_asmmoveax,cr0/这是必须在核心级才能执行的这是必须在核心级才能执行的这是必须在核心级才能执行的这是必须在核心级才能执行的/特权指令特权指令特权指令特权指令mov_cr0,eax_asm iretd/中断返回(中断返回(中断返回(中断返回(为什么不是为什么不是为什么不是为什么不是ret?ret?)35http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术intmain(intargc,char*argv)DWORDLONGidtr,saveidt;WORDnewgate4=0 x0000,0 x0028,0 xee00,0 x0000;/中断门描述符,中断门描述符,中断门描述符,中断门描述符,DPL=3DPL=3_asmsidtidtr/将将将将IDTRIDTR的值存在的值存在的值存在的值存在idtridtr变量开变量开变量开变量开/始的始的始的始的6 6个字节中个字节中个字节中个字节中movebx,DWORDptridtr+2/把把把把IDTIDT的的的的/基地址读入基地址读入基地址读入基地址读入EBXEBX寄存器寄存器寄存器寄存器addebx,24/选择中断选择中断选择中断选择中断3 3作为进入核心级的作为进入核心级的作为进入核心级的作为进入核心级的/入口,中断入口,中断入口,中断入口,中断3 3的门描述符的门描述符的门描述符的门描述符/的地址是的地址是的地址是的地址是IDTIDT基地址加上基地址加上基地址加上基地址加上3*83*8/(每个门描述符(每个门描述符(每个门描述符(每个门描述符8 8个字节)个字节)个字节)个字节)movesi,ebxleaedi,saveidt36http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术movsd/保存原来中断保存原来中断保存原来中断保存原来中断3 3的门描述符的门描述符的门描述符的门描述符movsd/到到到到saveidtsaveidt中中中中leaeax,newint3movnewgate,axshreax,16movnewgate+6,ax/向新的中断描述符中填入向新的中断描述符中填入向新的中断描述符中填入向新的中断描述符中填入/中断处理程序的入口偏移量中断处理程序的入口偏移量中断处理程序的入口偏移量中断处理程序的入口偏移量leaesi,newgatemovedi,ebxmovsd/用新中断描述符在用新中断描述符在用新中断描述符在用新中断描述符在IDTIDT中中中中movsd/替换原来的中断替换原来的中断替换原来的中断替换原来的中断3 3描述符描述符描述符描述符int3h/触发中断触发中断触发中断触发中断3 3,使程序跳转到,使程序跳转到,使程序跳转到,使程序跳转到/0/0级执行中断处理程序级执行中断处理程序级执行中断处理程序级执行中断处理程序37http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术leaesi,saveidtmovedi,ebxmovsdmovsd/恢复原来中断恢复原来中断恢复原来中断恢复原来中断3 3的门描述符的门描述符的门描述符的门描述符printf(cr0=0 x%x,_cr0););/输出结果输出结果输出结果输出结果return0;38http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术10.3.3虚拟设备驱动程序(虚拟设备驱动程序(VxD)基础基础1.VxD的文件结构的文件结构VxDVxD的五个段的五个段的五个段的五个段VxD_CODEVxD_CODE保护模式下的代码段保护模式下的代码段保护模式下的代码段保护模式下的代码段含设备驱动程序回调例程、服务程序、含设备驱动程序回调例程、服务程序、API接口函数和接口函数和控制程序。控制程序。VxD_DATAVxD_DATA保护模式下的数据段保护模式下的数据段保护模式下的数据段保护模式下的数据段包含设备描述块、服务表、全局变量等。包含设备描述块、服务表、全局变量等。VxD_ICODEVxD_ICODE 保护模式下的初始化代码段保护模式下的初始化代码段保护模式下的初始化代码段保护模式下的初始化代码段初始化的时候用的服务程序和过程。初始化后被丢弃初始化的时候用的服务程序和过程。初始化后被丢弃VxD_IDATAVxD_IDATA 保护模式下的初始化数据段保护模式下的初始化数据段保护模式下的初始化数据段保护模式下的初始化数据段初始化时用的数据。初始化后被丢弃。初始化时用的数据。初始化后被丢弃。VxD_REAL_INITVxD_REAL_INIT 实模式下的初始化资料与代码实模式下的初始化资料与代码实模式下的初始化资料与代码实模式下的初始化资料与代码该过程返回后被丢弃。该过程返回后被丢弃。39http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术typedef struct tagDDB DWORD DDB_Next;/VMM使用这一项来指出使用这一项来指出/下一个下一个DDB的地址的地址WORDDDB_SDK_Version;/建立该建立该VxD所使用的所使用的/SDK/DDK的版本的版本号号WORDDDB_Req_Device_Number;/设备设备ID。/UNDEFINED_DEVICE_ID表示表示/不使用唯一不使用唯一IDBYTEDDB_Dev_Major_Version;/VxD的主版本号的主版本号BYTEDDB_Dev_Minor_Version;/VxD的次版本号的次版本号WORDDDB_Flags;/DDB标志位标志位BYTEDDB_Name8;/VxD的名字,不足的名字,不足8个字节必须个字节必须/以空格补满以空格补满DWORD DDB_Init_Order;/指定指定VxD的初始化顺序,如果没的初始化顺序,如果没/有特别的初始化要求就使用有特别的初始化要求就使用/UNDEFINED_INIT_ORDERDWORD DDB_Control_Proc;/设备控制程序的地址设备控制程序的地址DWORD DDB_V86_API_Proc;/V86API程序的入口地址程序的入口地址2.VxD的设备描述符块的设备描述符块DDB40http:/ 电子发烧友 http:/ 电子技术论坛http:/http:/现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术现代微机原理与接口技术DWORD DDB_PM_API_Proc;/保护模式保护模式API程序的入口地址程序的入口地址DWORD DDB_V86_API_CSIP/V86入口点的入口点的CS:IPDWORD DDB_PM_API_CSIP;/保护模式