欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C机的高级编程技术.ppt

    • 资源ID:68138897       资源大小:526KB        全文页数:74页
    • 资源格式: PPT        下载积分:30金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要30金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C机的高级编程技术.ppt

    PCPC机的高级编程技术机的高级编程技术1第一节第一节 软件对接口的访问方式软件对接口的访问方式 裸机裸机BIOS直接访问直接访问 驱动程序驱动程序操作系统操作系统实实模模式式应用程序应用程序返回3页返回4页返回5页返回6页2一、一、直接访问层次直接访问层次 特点:特点:可以直接进行内存和端口的访问,也可以自可以直接进行内存和端口的访问,也可以自行决定是否在实模式和保护模式间切换。行决定是否在实模式和保护模式间切换。通常所有端口和内存都是对程序员开放的。通常所有端口和内存都是对程序员开放的。工具:工具:汇编语言或汇编语言或C C语言。语言。应用:应用:BIOSBIOS都是基于这种低级层次编写的;驱动程都是基于这种低级层次编写的;驱动程序也有使用这种方法的;实模式下应用程序也可以使序也有使用这种方法的;实模式下应用程序也可以使用这种方法。用这种方法。优点:优点:编写的代码执行速度最快,占用空间最小。编写的代码执行速度最快,占用空间最小。缺点:缺点:需要对硬件和接口有很熟悉的了解;需要对硬件和接口有很熟悉的了解;熟悉汇编,或熟练使用熟悉汇编,或熟练使用C C语言的指针;语言的指针;不利于增加对新设备的控制。不利于增加对新设备的控制。转2页3二、二、BIOS访问层次访问层次 特点:特点:通过通过BIOSBIOS提供的功能调用间接地对内存或端提供的功能调用间接地对内存或端口访问,从而控制硬件口访问,从而控制硬件。工具:工具:汇编语言或汇编语言或C C语言。语言。应用:应用:驱动程序有些会使用这些功能调用;驱动程序有些会使用这些功能调用;需要获得高效率的应用程序也采用此方法需要获得高效率的应用程序也采用此方法。优点:优点:编写的代码执行速度较快;编写的代码执行速度较快;编写的代码不需要直接对硬件进行控制。编写的代码不需要直接对硬件进行控制。缺点:缺点:需要对底层信号有所了解;需要对底层信号有所了解;增加对新设备的控制不很方便,但好于低级增加对新设备的控制不很方便,但好于低级层次。层次。转2页4三、三、驱动程序驱动程序层次层次 特点:特点:使用使用BIOSBIOS功能调用、操作系统功能调用和直功能调用、操作系统功能调用和直接访问的方法编写符合特定操作系统管理规范的设备接访问的方法编写符合特定操作系统管理规范的设备驱动程序驱动程序。工具:工具:VC+VC+与与DDKDDK开发包,或第三方开发工具如开发包,或第三方开发工具如DriverStudioDriverStudio。应用:应用:在操作系统层面上的设备控制,并为应用程在操作系统层面上的设备控制,并为应用程序提供序提供APIAPI支持。支持。优点:优点:既能够控制硬件,又保证操作系统的完整与既能够控制硬件,又保证操作系统的完整与安全安全。缺点:缺点:需要对底层信号有所了解;需要对底层信号有所了解;需要对操作系统各管理模块有深入的了解。需要对操作系统各管理模块有深入的了解。转2页5四、四、应用程序应用程序层次层次 特点:特点:使用操作系统和各种驱动程序所提供的功能使用操作系统和各种驱动程序所提供的功能调用或调用或APIAPI函数间接对硬件或内存进行访问函数间接对硬件或内存进行访问。工具:工具:VC+VC+、DelphiDelphi、JavaJava等。等。应用:应用:编写面向终端用户的各类应用程序编写面向终端用户的各类应用程序。优点:优点:无需对硬件控制有太多了解,只需完成应用无需对硬件控制有太多了解,只需完成应用层面的工作就可以,而且还保证操作系统的完整与安层面的工作就可以,而且还保证操作系统的完整与安全。全。缺点:缺点:需要了解大量的需要了解大量的APIAPI和功能调用函数的功能;和功能调用函数的功能;由于是间接调用,所以代码的效率和编译系由于是间接调用,所以代码的效率和编译系统有很大的关系。统有很大的关系。转2页6第二节第二节 Pentium 4Pentium 4的内存管理的内存管理一、实模式的存储管理(同一、实模式的存储管理(同PC/XTPC/XT)采用内存分段的办法,内存分为若干段,段的大小采用内存分段的办法,内存分为若干段,段的大小根据需要决定,最大为根据需要决定,最大为64KB64KB。16位段地址位段地址16位段内偏移位段内偏移:16位段地址位段地址16位段内偏移位段内偏移(左移四位)(左移四位)+20位物理地址位物理地址=软件地址:软件地址:物理地址:物理地址:思考:软件地址到物理地址变换的二义性及应用?思考:软件地址到物理地址变换的二义性及应用?段地址大小设置与地址变换的关联?段地址大小设置与地址变换的关联?7 内存区分配内存区分配:0000000A0000100000110000FFFFFF640KB常规内存常规内存384KB高端内存块高端内存块UMB64KB高端内存区高端内存区HMA14095MB扩展内存块扩展内存块EMB存放用户程序和存放用户程序和DOSDOS驻驻留部分留部分存放显存、网卡和部分用户存放显存、网卡和部分用户的的DOS驱动程序和驱动程序和BIOS存放部分存放部分DOS驻留程序驻留程序大于大于1M以上的以上的扩展内存,扩展内存,DOS下不能直接访问,需要用下不能直接访问,需要用XMS规范使用。可利用规范使用。可利用DOS调调用或用或BIOS调用来使用。调用来使用。8二、保护模式下的系统地址寄存器二、保护模式下的系统地址寄存器 说明:说明:GDTRGDTR、IDTR IDTR 在进入保护模式前设置,在进入保护模式前设置,TRTR、LDTRLDTR在任在任 务切换时设置。务切换时设置。GDTGDT、IDTIDT整个系统各一个,整个系统各一个,TSSTSS、LDTLDT每个任务一个。每个任务一个。选择符与描述符含义不同。选择符与描述符含义不同。名称名称缩写缩写长度长度内容内容全局描述符表寄存器全局描述符表寄存器GDTRGDTR4848位位GDTGDT的的3232位线性地址位线性地址+16+16位界限值位界限值中断描述符表寄存器中断描述符表寄存器IDTRIDTR4848位位IDTIDT的的3232位线性地址位线性地址+16+16位界限值位界限值任务状态段寄存器任务状态段寄存器TRTR1616位位TSSTSS的的1616位选择符位选择符全局描述符表寄存器全局描述符表寄存器LDTRLDTR1616位位LDTLDT的的1616位选择符位选择符1 1、系统地址寄存器汇总表、系统地址寄存器汇总表9基址基址界限界限选择符选择符TSSTSS描述符描述符线性地址线性地址TSS结构结构2 2、系统地址寄存器与系统表关系、系统地址寄存器与系统表关系基址基址界限界限选择符选择符LDTLDT描述符描述符01LDT2段描述符段描述符段寄存器选择符段寄存器选择符选择符选择符基址基址界限界限IDTR(48bit)01门描述符门描述符IDT2门描述符门描述符基址基址界限界限GDTR(48bit)TR(16bit)选择符选择符01TSS描述符描述符GDT2LDT描述符描述符段描述符段描述符LDTR(16bit)选择符选择符描述符长均为描述符长均为8Byte8Byte返回下页返回12页返回13页10说明说明1 1:GDTGDT表项类型表项类型LDTLDT描述符、描述符、TSSTSS描述符、段描述符;描述符、段描述符;IDTIDT表项类型表项类型中断门描述符、陷阱门描述符、任务门描中断门描述符、陷阱门描述符、任务门描 述符、调用门描述符;述符、调用门描述符;LDTLDT表项类型表项类型段描述符。段描述符。说明说明3 3:表或结构长度表或结构长度=(界限)(界限)+1+1。例:例:GDTRGDTR的内容为的内容为00F0000000FFH00F0000000FFH,求,求GDTGDT的首地址和末地址的首地址和末地址及该表含有多少个描述符及该表含有多少个描述符?转上页解:解:GDTGDT首址首址=00F00000H=00F00000H;GDTGDT末址末址=00F00000H+0FFH=00F000FFH=00F00000H+0FFH=00F000FFH;GDTGDT描述符个数描述符个数=GDT=GDT长度长度/8=(0FFH+1)/8=32/8=(0FFH+1)/8=32。说明说明2 2:不同类型描述符通过第不同类型描述符通过第5 5字节的字节的D3D0D3D0区分。区分。转19页113 3、TSSTSS与与LDTLDT关系关系I/O允许位映象(最大允许位映象(最大8K)中断重定向位映象(中断重定向位映象(32字节)字节)操作系统可利用(长度可变)操作系统可利用(长度可变)I/OI/O允许位映象域基址允许位映象域基址 0 T0 T 0 0 任务任务LDTLDT选择符选择符 0 GS0 GS、FSFS选择符选择符 0 DS0 DS、SSSS选择符选择符 0 CS0 CS、ESES选择符选择符EDIEDI、ESIESI、EBPEBP、EBXEBX、EDXEDX、ECXECX、EAXEAX EFLAG EFLAG、EIPEIPCR3CR3 0 SS2 0 SS2(特权级特权级2 2)ESP2ESP2 0 SS1 0 SS1(特权级特权级1 1)ESP1ESP1 0 SS0 0 SS0(特权级特权级0 0)ESP0ESP0 0 0 反向链反向链00H04H08H0cH10H14H18H1cH20H28H48H50H58H60H64H68HTSS段限段限TSS结构结构当前任务当前任务LDTR选择符选择符上一上一任务任务TR选择符选择符当前任务的段选择符当前任务的段选择符当前任务的优先级可改变,堆当前任务的优先级可改变,堆栈的优先级也要相应改变。栈的优先级也要相应改变。系统为任务的系统为任务的0202级堆栈指针用级堆栈指针用SSiSSi和和ESPiESPi表示。表示。虚拟虚拟8086模式且模式且CR4中中VME=1时有效时有效转10页124 4、门描述符与段选择符关系、门描述符与段选择符关系偏移偏移属性属性选择符选择符IDTRIDT边界边界属性属性基基地址地址GDT/LDT线性地址线性地址中断服务中断服务子程序子程序代码段代码段基基地址地址偏偏移移EIP门描述符门描述符段选择符段选择符或或TSS选择符选择符段描述符段描述符说明:说明:利用段选择符的利用段选择符的bit2bit2确定查询确定查询GDTGDT或或LDTLDT。段选择符指向一个段描述符。段选择符指向一个段描述符。对任务门而言,选择符为对任务门而言,选择符为TSSTSS选择符。选择符。任务的切换:任务的切换:通过直接改变通过直接改变TRTR方式,方式,或通过任务门间接方式实现。或通过任务门间接方式实现。转10页13三、保护模式下三、保护模式下Pentium 4Pentium 4的段式存储管理的段式存储管理 1 1、段式管理的地址变换段式管理的地址变换段寄存器的段寄存器的152位位偏移量偏移量4532310段描述符段描述符段表段表32位线性地址位线性地址物理物理地址地址逻辑逻辑地址地址段基址段基址Pentium系列的虚拟地址空间是系列的虚拟地址空间是24664TB。注意:注意:保护模式下段寄存器的含义已变为段选择符,保护模式下段寄存器的含义已变为段选择符,通常称段寄存器为段选择符。通常称段寄存器为段选择符。142 2、段描述符表与段选择符段描述符表与段选择符RPLTI段选择符段选择符15210索引索引TI=1TI=001GDT2段描述符段描述符段描述符段描述符01LDT2段描述符段描述符段描述符段描述符153 3、段描述符段描述符D7D0段界限段界限70段界限段界限158基址基址70基址基址158基址基址2316基址基址3124TYPESAVLDPLPGD/B0段界限段界限191601234567返回20页16D7D0AVLGD/B0段界限段界限1916用户用户/操作系统可用位操作系统可用位D/B位位粒度位粒度位D/B位位代码段代码段(D位位)D=1使用使用32位操作系统和位操作系统和32位寻址方式位寻址方式D=0使用使用16位操作系统和位操作系统和16位寻址方式位寻址方式数据段数据段(B位位)B=1堆栈使用堆栈使用ESP寄存器,上限为寄存器,上限为FFFFFFFFHB=0堆栈使用堆栈使用SP寄存器,上限为寄存器,上限为FFFFH段描述符中的第段描述符中的第6字节:字节:思考:如何知道该段为代码段或数据段?思考:如何知道该段为代码段或数据段?17段描述符中非系统段的第段描述符中非系统段的第5字节:字节:AWREDCE=0E=1S=1DPLPD7D0存在位存在位特权位特权位S=1是非系统段是非系统段S=0是系统描述符是系统描述符代码段标志代码段标志数据段标志数据段标志兼容位兼容位可读位可读位访问位访问位扩展方向位扩展方向位可写位可写位18段描述符中系统段的第段描述符中系统段的第5字节:字节:类型值类型值段类型段类型类型值类型值段类型段类型0(0000)未定义8(1000)未定义1(0001)286的有效任务状态段9(1001)386的有效任务状态段2(0010)LDT描述符10(1010)未定义3(0011)286的忙碌任务状态段11(1011)386的忙碌任务状态段4(0100)286的调用门12(1100)386的调用门5(0101)286或386的任务门13(1101)未定义6(0110)286的中断门14(1110)386的中断门7(0111)286的陷阱门15(1111)386的陷阱门D7D0TYPESDPLP返回11页19#include stdafx.h#include#include/wtypes.h定义了定义了DWORDLONG,DWORD,WORD等数据类型等数据类型DWORDLONG gdtr,savegdt;/下面是下面是GDT中将创建的数据段描述符表中将创建的数据段描述符表,基地址基地址0X00000F00,段界限为段界限为0XFFFF,优先级为优先级为/3的在内存中的可写数据段,同的在内存中的可写数据段,同P16段描述符段描述符WORD descriptor4=0 xFFFF,0X0F00,0XF200,0X0040;int result10;int main(int argc,char*argv)_asm pushebpsgdtgdtr/将将GDTR寄存器的内容读取到寄存器的内容读取到gdtr开始的开始的6个字节中,其中个字节中,其中/前两个字节给出前两个字节给出GDT的界限值的界限值,高高4个字节给出个字节给出GDT的基地址的基地址movebp,dword ptr gdtr+2 /将将gdt的基地址读到的基地址读到EBP中中addebp,70h /我们选择我们选择70H偏移下的段描述符(偏移下的段描述符(GDT中第中第14个描述符)个描述符)leaedi,savegdtmovesi,ebpmovsdmovsd/以上以上4条指令保存原来在条指令保存原来在70H偏移上的描述符偏移上的描述符movedi,ebpleaesi,descriptor;movsdmovsd /把我们的数据段描述符装入把我们的数据段描述符装入70H偏移上偏移上pushesmovax,0073h /选择字为描述符偏移选择字为描述符偏移70H拼接上低拼接上低3位控制位元位控制位元,/其中其中Ti为为0,表示访问表示访问GDT,RPL为为11,说明说明3级优先级级优先级,所以就为所以就为73H转16页20moves,ax/ES装入选择字装入选择字73Hleaedi,result /将存放输出结果的变量的地址放在将存放输出结果的变量的地址放在EDI中中moveax,1movebx,1_asmmovcx,10a1:moves:eax,eaxaddeax,4loopa1 /上面上面4条指令将向物理地址条指令将向物理地址0X00000F00处写处写10个双字个双字_asmmovcx,10a2:moveax,es:ebxmovedi,eaxaddebx,4addedi,4loopa2/以上从物理地址以上从物理地址0X00000F00处依次读出处依次读出10个数据存放在个数据存放在/result数组中数组中_asmpopespopebp 21printf(result=););for(int i=0;i10;i+)printf(%d,resulti););/输出结果输出结果return 0;22四、保护模式下四、保护模式下Pentium 4Pentium 4的虚拟页式存储管理的虚拟页式存储管理主存主存页框页框页面页面程序程序1程序程序2程序程序3231 1、页面大小选择页面大小选择PGEPCE83176543210MCEPAE PSEDE TSDVMEPVI保留,缺省为全保留,缺省为全0CR4PAEPSE物理地址位数物理地址位数页面大小页面大小0032位位4KB0132位位4KB/4MB1036位位4KB1136位位4KB/2MB242 2、3232位位4KB4KB分页方式地址变换分页方式地址变换 32位线位线性地址性地址页目录项号页目录项号页面号页面号偏移偏移CR332位物理地址位物理地址31222112110页目录页目录页表页表3112119876543210PWTPCD页表基地址页表基地址3112PRWUSAVLAD0页目页目录项录项PWTPCD页框基地址页框基地址3112PRWUSAVLAD页表页表项项3112119876543210P=出现位,出现位,US=用户用户/监督位,监督位,PCD是页是页Cache禁止,禁止,D=Cache“脏脏”位,位,RW=读读/写位,写位,PWT=页写贯穿位,页写贯穿位,A=访问位,访问位,AVL=用户的操作系统可用用户的操作系统可用位。而第位。而第7位(位(PS)在在4KB分页中为分页中为0253 3、3232位位4MB4MB分页方式地址变换分页方式地址变换 32位线性地址位线性地址页目录项号页目录项号偏移偏移CR332位物理地址位物理地址3122210页目录页目录3122876543210PWTPCD页框基地址页框基地址3122PRWUSAD1页目录项页目录项264 4、3636位位4KB4KB分页方式地址变换分页方式地址变换 31543210PWTPCD32字节对齐的字节对齐的PDPT基地址基地址CR3寄存寄存器器31363512116543210PWTPCDPAVLPDPT项项4KB对齐的页目录基地址(高对齐的页目录基地址(高24位)位)32位线性地址位线性地址页目录项号页目录项号页面号页面号偏移偏移CR336位物理地址位物理地址313029212012110页目录页目录页表页表PDPT项号项号页目录指针表页目录指针表464位位51264位位51264位位63363512119876543210PWTPCD4KB对齐的页表基地址对齐的页表基地址PRWUSAVLA0页目录项页目录项PWTPCD4KB对齐的页框基地址对齐的页框基地址PRWUSAVLAD页表项页表项633635121198765432100G275 5、3636位位2MB2MB分页方式地址变换分页方式地址变换 32位线性地址位线性地址页目录项号页目录项号偏移偏移CR336位物理地址位物理地址31302921200页目录页目录PDPT项号项号页目录指针表页目录指针表464位位51264位位页目录项页目录项PWTPCD2MB对齐的页框基地址对齐的页框基地址PRWUSAVLAD6336352120121198765432101G低低21位位高高15位位28第三节第三节 Windows 9xWindows 9x驱动程序设计驱动程序设计 一、虚拟机与一、虚拟机与VxDVxD的引入的引入计算机底层硬件计算机底层硬件操作系统内核与操作系统内核与VxD操作系统提供的接口操作系统提供的接口应用软件应用软件特权级特权级3特权级特权级029Windows 9xWindows 9x运行环境:运行环境:Windows9x虚拟机环境虚拟机环境SYSVMWin16地址空间地址空间Win16程序程序Win16程序程序Win16程序程序Win16程序程序Win32程序程序Win32地址空间地址空间Win32程序程序Win32地址空间地址空间DOSVMDOS程序程序DOSVMDOS程序程序30二、虚拟机下二、虚拟机下I/OI/O端口访问端口访问 执行执行in,out指令指令CPLIOPL?IOPM相关位相关位=0?进行进行I/O操作操作否否否否产生一个一产生一个一般保护异常般保护异常是是是是IOPLIOPL用以表示指定的用以表示指定的I/OI/O操作处操作处于特权级的哪一级。它在于特权级的哪一级。它在EFLAGSEFLAGS中。中。CPLCPL当前段的当前段的I/OI/O优先级,它实优先级,它实际上是际上是CSCS段选择符的第段选择符的第00第第1 1位。位。IOPMIOPM是对所有是对所有VMVM都起作用都起作用的权限机制,它以位(的权限机制,它以位(bitbit)来代表每个端口。某位为来代表每个端口。某位为1 1,则该代表的端口被禁止访问;则该代表的端口被禁止访问;某位为某位为0 0,则允许访问该位所,则允许访问该位所代表的端口。代表的端口。1 1、保护模式下保护模式下I/OI/O访问访问 约定:约定:IOPL为为0。312 2、V86V86模式下模式下I/OI/O访问访问 执行执行in,out指令指令IOPM相关位相关位=0?进行进行I/O操作操作否否产生一个一产生一个一般保护异常般保护异常是是 约定:约定:忽略忽略CPLCPLIOPL的判断。的判断。访问:访问:符合符合保护模式下的保护模式下的I/O访问规则。访问规则。如何捕获一个端口的访问?如何捕获一个端口的访问?配置配置IOPM相关位相关位323 3、VxDsVxDs捕获捕获的的I/OI/O端口端口33三、虚拟机下三、虚拟机下中断或异常的处理中断或异常的处理外部中断和处理器异常外部中断和处理器异常软中断软中断CPL门描述符门描述符的的DPL?是是访问各类门描述符访问各类门描述符转移后代码段的转移后代码段的DPLCPL?是是执行执行0特权级别中的中断处理程序特权级别中的中断处理程序禁止访问禁止访问否否否否 约定:约定:外部中断和异常处理的外部中断和异常处理的DPLDPL为为0 0;软中断的软中断的DPLDPL不变,为设定值。不变,为设定值。34 特权切换:特权切换:中断处理程序中断处理程序特权级为特权级为0;转移后转移后DPLCPLDPLCPL时,运行中断处理程序。时,运行中断处理程序。Win32Win32程序程序虚拟机虚拟机VxDVxD中中的回调的回调函数函数 VPICD VPICDINT xINT xCALLCALLRETRETIRETIRET硬件中断硬件中断IRETIRET异常处理程序异常处理程序 思考:思考:如何使自己从用户级转到核心级?如何使自己从用户级转到核心级?利用保护模式下中断的处理流程。利用保护模式下中断的处理流程。35例:例:在在IDT中构造一个中断门描述符,使它的中构造一个中断门描述符,使它的DPL=3,这样它就可以被用户级的程序访问(这样它就可以被用户级的程序访问(DPLCPL),),将该中断门描述符的段选择字设为将该中断门描述符的段选择字设为028H,显然该选择显然该选择字对应的代码段在字对应的代码段在GDT中,由于中,由于OS代码段基地址为代码段基地址为00000000H,段界限为段界限为FFFFFFFFH,所以现在中断所以现在中断门的偏移量就实际给出了中断处理程序入口的线性地门的偏移量就实际给出了中断处理程序入口的线性地址,我们只要把一个过程作为中断处理程序,这个过址,我们只要把一个过程作为中断处理程序,这个过程就处在核心级里了。程就处在核心级里了。程序如下:程序如下:36#include stdafx.h#include#include/wtypes.h定义了定义了DWORDLONG,DWORD,WORD等数据类型等数据类型DWORD_cr0;/用来保存用来保存CR0寄存器的寄存器的值值void _declspec(naked)newint3(void)/运行在核心级的中断运行在核心级的中断3处理程序处理程序_asmmoveax,cr0/这是必须在核心级才能执行的特权指令这是必须在核心级才能执行的特权指令mov_cr0,eax_asmiretd/中断返回中断返回int main(int argc,char*argv)DWORDLONG idtr,saveidt;WORDnewgate4=0 x0000,0 x0028,0 xee00,0 x0000;/中断门描述符中断门描述符_asmsidtidtr/将将IDTR的值存在的值存在idtr变量开始的变量开始的6个字节中个字节中movebx,DWORD ptridtr+2/把把IDT的基地址读入的基地址读入EBX寄存器寄存器addebx,24/选择中断选择中断3作为进入核心级的入口,中断作为进入核心级的入口,中断3的门描述符的门描述符/的地址是的地址是IDT基地址加上基地址加上3*8(每个门描述符(每个门描述符8个字节)个字节)movesi,ebxleaedi,saveidtmovsdmovsd/保存原来中断保存原来中断3的门描述符到的门描述符到saveidt中中leaeax,newint3转下页37movnewgate,axshreax,16movnewgate+6,ax /向新的中断描述符中填入中断处理程序的偏移量向新的中断描述符中填入中断处理程序的偏移量leaesi,newgatemovedi,ebxmovsdmovsd/用新中断描述符在用新中断描述符在IDT中替换原来的中断中替换原来的中断3描述符描述符int3h/触发中断触发中断3,使程序跳转到,使程序跳转到0级执行中断处理程序级执行中断处理程序leaesi,saveidtmovedi,ebxmovsdmovsd/恢复原来中断恢复原来中断3的门描述符的门描述符 printf(cr0=0 x%x,_cr0););/输出结果输出结果return 0;返回上页P PDPLDPL0111001110000000保留保留偏移量偏移量15001500偏移量偏移量31163116段选择符段选择符(28HC,30H-D)(28HC,30H-D)31 16 15 14 13 12 8 7 6 5 4 031 16 15 14 13 12 8 7 6 5 4 0中断门描述符:中断门描述符:38四、虚拟设备驱动程序四、虚拟设备驱动程序(VxDVxD)基础基础1 1、VxD的程序文件结构的程序文件结构VxD包含五个段:包含五个段:VxD_CODEVxD_CODE(保护模式下的代码段保护模式下的代码段):含设备驱动程序回调例程、:含设备驱动程序回调例程、服务程序、服务程序、APIAPI接口函数和控制程序。接口函数和控制程序。VxD_DATAVxD_DATA(保护模式下的数据段保护模式下的数据段):包含设备描述块、服务表、:包含设备描述块、服务表、全局变量等。全局变量等。VxD_ICODEVxD_ICODE(保护模式下的初始化代码段保护模式下的初始化代码段):初始化时用的服务:初始化时用的服务程序和过程,初始化后被丢弃。程序和过程,初始化后被丢弃。VxD_IDATAVxD_IDATA(保护模式下的初始化数据段保护模式下的初始化数据段):初始化时用的数据,:初始化时用的数据,初始化后被丢弃。初始化后被丢弃。VxD_REAL_INITVxD_REAL_INIT(实模式下的初始化资料与代码实模式下的初始化资料与代码):初始化时调:初始化时调用,该过程返回后被丢弃。用,该过程返回后被丢弃。每个每个VxDVxD装入主存后产生一个对象,每装入主存后产生一个对象,每种种型号的设备型号的设备共用一个共用一个VxD对象。对象。392 2、VxDVxD的设备描述符块的设备描述符块DDB DDB typedef struct tagDDB DWORDDDB_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个字节必须以空格补满个字节必须以空格补满DWORDDDB_Init_Order;/指定指定VxD的初始化顺序,如果没有特别的初的初始化顺序,如果没有特别的初/始化要求就使用始化要求就使用UNDEFINED_INIT_ORDERDWORDDDB_Control_Proc;/设备控制程序的地址设备控制程序的地址DWORDDDB_V86_API_Proc;/V86API程序的入口地址程序的入口地址DWORDDDB_PM_API_Proc;/保护模式保护模式API程序的入口地址程序的入口地址DWORDDDB_V86_API_CSIP/V86入口点的入口点的CS:IPDWORDDDB_PM_API_CSIP;/保护模式入口点的保护模式入口点的CS:IPDWORDDDB_Reference_Data;/实模式初始化代码设置的参考资料实模式初始化代码设置的参考资料DWORDDDB_VxD_Service_Table_Ptr;/VxD服务表的地址服务表的地址DWORDDDB_VxD_Service_Table_Size;/VxD服务表中提供的服务表中提供的VxD服务的服务的 /数目数目 DDB;每个设备(含同型号设备)均有一个每个设备(含同型号设备)均有一个DDB。403 3、VxDVxD的加载与卸载的加载与卸载 动态加载:动态加载:API函数函数发的发的消息消息功能功能CreateFileSys_Dynamic_Device_Init加载加载VxDDeviceIOControlW32_DeviceIOControl与与VxD进行交互进行交互处理处理CloseHandleSys_Dynamic_Device_Exit卸载卸载VxDhDevicehDevice=CreateFileCreateFile(.myfirst.vxdmyfirst.vxd,0,0,0,OPEN_EXISTING,0,0,0,OPEN_EXISTING,FILE_FLAG_DELETE_ON_CLOSE,0FILE_FLAG_DELETE_ON_CLOSE,0););DeviceIoControlDeviceIoControl(hDevicehDevice,DIOC_MY_IODIOC_MY_IO,NULL,0,NULL,0,NULL,0,NULL,0,NULL,NULLNULL,NULL););CloseHandleCloseHandle(hDevicehDevice););加载:加载:使设备与使设备与Win32API挂钩。挂钩。41静态加载:静态加载:424 4、VMMVMM与与VxDVxD间的消息间的消息 5 5、Win32Win32与与VxDVxD间的通信间的通信 Win32 Win32 应用程序应用程序调用指令调用指令 回调函数回调函数 VxDVxDDeviceIoControlDeviceIoControl()()1.Shell_PostMessage()1.Shell_PostMessage()给应用程序消息给应用程序消息2.VWIN32_QueueUserApc()2.VWIN32_QueueUserApc()给应用线程事件给应用线程事件3.3.发通过转换后的发通过转换后的Ring0Ring0级事件给应用程序级事件给应用程序43第四节第四节 Windows 2000/XPWindows 2000/XP设备驱动设备驱动程序设计程序设计一、一、Windows 2000/XPWindows 2000/XP的设备驱动程序的设备驱动程序虚拟设备虚拟设备驱动程序(驱动程序(VDD)内核模式内核模式驱动程序驱动程序文件系统文件系统驱动程序驱动程序保留设备保留设备驱动程序驱动程序PnP驱动程序驱动程序显示显示驱动程序驱动程序WDM驱动程序驱动程序类驱动程序类驱动程序迷你驱动程序迷你驱动程序44 虚拟设备驱动程序虚拟设备驱动程序(Virtual Device Driver(Virtual Device Driver,VDD)VDD)可使可使DOSDOS应用程序访问应用程序访问x86x86平台上的硬件,也可支持平台上的硬件,也可支持Windows 9xWindows 9x下的对端口访问。下的对端口访问。WDMWDM驱动程序驱动程序是一种遵循电源管理协议并能在是一种遵循电源管理协议并能在Win98Win98和和Win2000Win2000上实现源代码级兼容的上实现源代码级兼容的PnPPnP驱动程序。驱动程序。WDMWDM驱驱动程序又可分为类驱动程序(管理已定义类的设备动程序又可分为类驱动程序(管理已定义类的设备)和迷你驱动程序(提供厂商专有的支持和迷你驱动程序(提供厂商专有的支持)。显示驱动程序显示驱动程序是用于显示和打印设备的内核模式驱是用于显示和打印设备的内核模式驱动程序。动程序。文件系统驱动程序文件系统驱动程序在本地磁盘或网络上实现标准在本地磁盘或网络上实现标准PCPC文件系统模型文件系统模型(含多层次目录结构和命名文件概念含多层次目录结构和命名文件概念)。保留设备驱动程序保留设备驱动程序主要包括主要包括Windows NTWindows NT早期版本的早期版本的驱动程序,它直接控制一个硬设备而不用其他驱动程驱动程序,它直接控制一个硬设备而不用其他驱动程序帮助,可以不做修改地在序帮助,可以不做修改地在Windows 2000Windows 2000中运行。中运行。45二、二、WDMWDM的的基本结构基本结构1 1、设备对象及设备对象栈设备对象及设备对象栈 设备对象设备对象:系统为帮助软件管理硬件而创建的一个数系统为帮助软件管理硬件而创建的一个数据结构(包括据结构(包括PDO、FDO、FiDO)。硬件仅指某功能设备,多功能设备有几个设备对象。硬件仅指某功能设备,多功能设备有几个设备对象。PDO(PDO(物理设备对象物理设备对象):):设备对象中的物理型对象。设备对象中的物理型对象。FDO(FDO(功能设备对象功能设备对象):):设备对象中的功能型对象。设备对象中的功能型对象。FiDOFiDO(过滤器设备对象过滤器设备对象):):在在I/OI/O管理器、管理器、FDOFDO和和PDOPDO间的间的监视、修改监视、修改IRPIRP流的过滤型对象,分上层过滤和下层过流的过滤型对象,分上层过滤和下层过滤对象。滤对象。设备对象栈设备对象栈:描述对设备对象内部处理请求的驱动层描述对设备对象内部处理请求的驱动层次的栈型结构,是设备对象的内部属性次的栈型结构,是设备对象的内部属性。转下页46FDOFDO设备对象设备对象FiDOFiDOFiDOFiDOPDOPDO设设备备对对象象栈栈上层过滤器驱动程序上层过滤器驱动程序功能驱动程序功能驱动程序下层过滤器驱动程序下层过滤器驱动程序总线驱动程序总线驱动程序IRPIRPI/OI/O系统服务系统服务Win32Win32子系统子系统应用程序应用程序用户态用户态核心态核心态I/OI/O管理器管理器返回上页返回下页返回49页返回50页472 2、设备驱动程序设备驱动程序 WDM模型中,设备驱动程序有下列几种类型:模型中,设备驱动程序有下列几种类型:功能驱动程序功能驱动程序:管理管理FDO所所代表的设备,负责其初代表的设备,负责其初始化、处理始化、处理I/O操作、操作、I/O操作完成时产生中断事件,操作完成时产生中断事件,为用户提供一种适

    注意事项

    本文(C机的高级编程技术.ppt)为本站会员(赵**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开