C机的高级编程技术.pptx
《C机的高级编程技术.pptx》由会员分享,可在线阅读,更多相关《C机的高级编程技术.pptx(74页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、PCPC机的高级编程技术机的高级编程技术1C机的高级编程技术共74页,您现在浏览的是第1页!节节 软件对接口的访问方式软件对接口的访问方式 裸机裸机BIOS直接访问直接访问 驱动程序驱动程序操作系统操作系统实实模模式式应用程序应用程序返回3页返回4页返回5页返回6页2C机的高级编程技术共74页,您现在浏览的是第2页!一、一、直接访问层次直接访问层次 特点:特点:可以直接进行内存和端口的访问,也可以自可以直接进行内存和端口的访问,也可以自行决定是否在实模式和保护模式间切换。行决定是否在实模式和保护模式间切换。通常所有端口和内存都是对程序员开放的。通常所有端口和内存都是对程序员开放的。工具:工具:
2、汇编语言或汇编语言或C C语言。语言。应用:应用:BIOSBIOS都是基于这种低级层次编写的;驱动程都是基于这种低级层次编写的;驱动程序也有使用这种方法的;实模式下应用程序也可以使序也有使用这种方法的;实模式下应用程序也可以使用这种方法。用这种方法。优点:优点:编写的代码执行速度最快,占用空间最小。编写的代码执行速度最快,占用空间最小。缺点:缺点:需要对硬件和接口有很熟悉的了解;需要对硬件和接口有很熟悉的了解;熟悉汇编,或熟练使用熟悉汇编,或熟练使用C C语言的指针;语言的指针;不利于增加对新设备的控制。不利于增加对新设备的控制。转2页3C机的高级编程技术共74页,您现在浏览的是第3页!三、三
3、、驱动程序驱动程序层次层次 特点:特点:使用使用BIOSBIOS功能调用、操作系统功能调用和直功能调用、操作系统功能调用和直接访问的方法编写符合特定操作系统管理规范的设备接访问的方法编写符合特定操作系统管理规范的设备驱动程序驱动程序。工具:工具:VC+VC+与与DDKDDK开发包,或第三方开发工具如开发包,或第三方开发工具如DriverStudioDriverStudio。应用:应用:在操作系统层面上的设备控制,并为应用程在操作系统层面上的设备控制,并为应用程序提供序提供APIAPI支持。支持。优点:优点:既能够控制硬件,又保证操作系统的完整与既能够控制硬件,又保证操作系统的完整与安全安全。缺
4、点:缺点:需要对底层信号有所了解;需要对底层信号有所了解;需要对操作系统各管理模块有深入的了解。需要对操作系统各管理模块有深入的了解。转2页4C机的高级编程技术共74页,您现在浏览的是第4页!第二节第二节 Pentium 4 Pentium 4的内存管理的内存管理一、实模式的存储管理(同一、实模式的存储管理(同PC/XTPC/XT)采用内存分段的办法,内存分为若干段,段的大小采用内存分段的办法,内存分为若干段,段的大小根据需要决定,最大为根据需要决定,最大为64KB64KB。16位段地址位段地址16位段内偏移位段内偏移:16位段地址位段地址16位段内偏移位段内偏移(左移四位)(左移四位)+20
5、位物理地址位物理地址=软件地址:软件地址:物理地址:物理地址:思考:软件地址到物理地址变换的二义性及应用?思考:软件地址到物理地址变换的二义性及应用?段地址大小设置与地址变换的关联?段地址大小设置与地址变换的关联?5C机的高级编程技术共74页,您现在浏览的是第5页!二、保护模式下的系统地址寄存器二、保护模式下的系统地址寄存器 说明:说明:GDTR GDTR、IDTR IDTR 在进入保护模式前设置,在进入保护模式前设置,TRTR、LDTRLDTR在任在任 务切换时设置。务切换时设置。GDT GDT、IDTIDT整个系统各一个,整个系统各一个,TSSTSS、LDTLDT每个任务一个。每个任务一个
6、。选择符与描述符含义不同。选择符与描述符含义不同。名称名称缩写缩写长度长度内容内容全局描述符表寄存器全局描述符表寄存器GDTRGDTR4848位位GDTGDT的的3232位线性地址位线性地址+16+16位界限值位界限值中断描述符表寄存器中断描述符表寄存器IDTRIDTR4848位位IDTIDT的的3232位线性地址位线性地址+16+16位界限值位界限值任务状态段寄存器任务状态段寄存器TRTR1616位位TSSTSS的的1616位选择符位选择符全局描述符表寄存器全局描述符表寄存器LDTRLDTR1616位位LDTLDT的的1616位选择符位选择符1 1、系统地址寄存器汇总表、系统地址寄存器汇总表
7、6C机的高级编程技术共74页,您现在浏览的是第6页!说明说明1 1:GDTGDT表项类型表项类型LDTLDT描述符、描述符、TSSTSS描述符、段描述符;描述符、段描述符;IDT IDT表项类型表项类型中断门描述符、陷阱门描述符、任务门描中断门描述符、陷阱门描述符、任务门描 述符、调用门描述符;述符、调用门描述符;LDT LDT表项类型表项类型段描述符。段描述符。说明说明3 3:表或结构长度表或结构长度=(界限)(界限)+1+1。例:例:GDTRGDTR的内容为的内容为00F0000000FFH00F0000000FFH,求,求GDTGDT的首地址和末地址的首地址和末地址及该表含有多少个描述符
8、及该表含有多少个描述符?转上页解:解:GDTGDT首址首址=00F00000H=00F00000H;GDT GDT末址末址=00F00000H+0FFH=00F000FFH=00F00000H+0FFH=00F000FFH;GDT GDT描述符个数描述符个数=GDT=GDT长度长度/8=(0FFH+1)/8=32/8=(0FFH+1)/8=32。说明说明2 2:不同类型描述符通过第不同类型描述符通过第5 5字节的字节的D3D0D3D0区分。区分。转19页7C机的高级编程技术共74页,您现在浏览的是第7页!4 4、门描述符与段选择符关系、门描述符与段选择符关系偏移偏移属性属性选择符选择符IDTR
9、IDT边界边界属性属性基地址基地址GDT/LDT线性地址线性地址中断服务中断服务子程序子程序代码段代码段基地址基地址偏移偏移EIP门描述符门描述符段选择符段选择符或或TSS选择符选择符段描述符段描述符说明:说明:利用段选择符的利用段选择符的bit2bit2确定查询确定查询GDTGDT或或LDTLDT。段选择符指向一个段描述符。段选择符指向一个段描述符。对任务门而言,选择符为对任务门而言,选择符为TSSTSS选择符。选择符。任务的切换:任务的切换:通过直接改变通过直接改变TRTR方式,方式,或通过任务门间接方式实现。或通过任务门间接方式实现。转10页8C机的高级编程技术共74页,您现在浏览的是第
10、8页!2 2、段描述符表与段选择符段描述符表与段选择符RPLTI段选择符段选择符15210索引索引TI=1TI=001GDT2段描述符段描述符段描述符段描述符01LDT2段描述符段描述符段描述符段描述符9C机的高级编程技术共74页,您现在浏览的是第9页!D7D0AVLGD/B0段界限段界限1916用户用户/操作系统可用位操作系统可用位D/B位位粒度位粒度位D/B位位代码段代码段(D位位)D=1使用使用32位操作系统和位操作系统和32位寻址方式位寻址方式D=0使用使用16位操作系统和位操作系统和16位寻址方式位寻址方式数据段数据段(B位位)B=1堆栈使用堆栈使用ESP寄存器,上限为寄存器,上限为
11、FFFFFFFFHB=0堆栈使用堆栈使用SP寄存器,上限为寄存器,上限为FFFFH段描述符中的第段描述符中的第6字节:字节:思考:如何知道该段为代码段或数据段?思考:如何知道该段为代码段或数据段?10C机的高级编程技术共74页,您现在浏览的是第10页!段描述符中系统段的第段描述符中系统段的第5字节:字节:类型值类型值段类型段类型类型值类型值段类型段类型0(0000)未定义8(1000)未定义1(0001)286的有效任务状态段9(1001)386的有效任务状态段2(0010)LDT描述符10(1010)未定义3(0011)286的忙碌任务状态段11(1011)386的忙碌任务状态段4(0100
12、)286的调用门12(1100)386的调用门5(0101)286或386的任务门13(1101)未定义6(0110)286的中断门14(1110)386的中断门7(0111)286的陷阱门15(1111)386的陷阱门D7D0TYPESDPLP返回11页11C机的高级编程技术共74页,您现在浏览的是第11页!moves,ax/ES装入选择字装入选择字73Hleaedi,result /将存放输出结果的变量的地址放在将存放输出结果的变量的地址放在EDI中中moveax,1movebx,1_asmmovcx,10a1:moves:eax,eaxaddeax,4loopa1 /上面上面4条指令将向
13、物理地址条指令将向物理地址0X00000F00处写处写10个双字个双字_asmmovcx,10a2:moveax,es:ebxmovedi,eaxaddebx,4addedi,4loopa2/以上从物理地址以上从物理地址0X00000F00处依次读出处依次读出10个数据存放在个数据存放在/result数组中数组中_asmpopespopebp 12C机的高级编程技术共74页,您现在浏览的是第12页!四、保护模式下四、保护模式下Pentium 4Pentium 4的虚拟页式存储管理的虚拟页式存储管理主存主存页框页框页面页面程序程序1程序程序2程序程序313C机的高级编程技术共74页,您现在浏览的
14、是第13页!2 2、3232位位4KB4KB分页方式地址变换分页方式地址变换 32位线位线性地址性地址页目录项号页目录项号页面号页面号偏移偏移CR332位物理地址位物理地址31222112110页目录页目录页表页表3112119876543210PWTPCD页表基地址页表基地址3112PRWUSAVLAD0页目页目录项录项PWTPCD页框基地址页框基地址3112PRWUSAVLAD页表页表项项3112119876543210P=出现位,出现位,US=用户用户/监督位,监督位,PCD是页是页Cache禁止,禁止,D=Cache“脏脏”位,位,RW=读读/写位,写位,PWT=页写贯穿位,页写贯穿位
15、,A=访问位,访问位,AVL=用户的操作系统可用用户的操作系统可用位。而第位。而第7位(位(PS)在)在4KB分页中为分页中为014C机的高级编程技术共74页,您现在浏览的是第14页!4 4、3636位位4KB4KB分页方式地址变换分页方式地址变换 31543210PWTPCD32字节对齐的字节对齐的PDPT基地址基地址CR3寄存寄存器器31363512116543210PWTPCDPAVLPDPT项项4KB对齐的页目录基地址(高对齐的页目录基地址(高24位)位)32位线性地址位线性地址页目录项号页目录项号页面号页面号偏移偏移CR336位物理地址位物理地址313029212012110页目录页
16、目录页表页表PDPT项号项号页目录指针表页目录指针表464位位51264位位51264位位63363512119876543210PWTPCD4KB对齐的页表基地址对齐的页表基地址PRWUSAVLA0页目录项页目录项PWTPCD4KB对齐的页框基地址对齐的页框基地址PRWUSAVLAD页表项页表项633635121198765432100G15C机的高级编程技术共74页,您现在浏览的是第15页!第三节第三节 Windows 9x Windows 9x驱动程序设计驱动程序设计 一、虚拟机与一、虚拟机与VxDVxD的引入的引入计算机底层硬件计算机底层硬件操作系统内核与操作系统内核与VxD操作系统提
17、供的接口操作系统提供的接口应用软件应用软件特权级特权级3特权级特权级016C机的高级编程技术共74页,您现在浏览的是第16页!二、虚拟机下二、虚拟机下I/OI/O端口访问端口访问 执行执行in,out指令指令CPLIOPL?IOPM相关位相关位=0?进行进行I/O操作操作否否否否产生一个一产生一个一般保护异常般保护异常是是是是IOPLIOPL用以表示指定的用以表示指定的I/OI/O操作处操作处于特权级的哪一级。它在于特权级的哪一级。它在EFLAGSEFLAGS中。中。CPLCPL当前段的当前段的I/OI/O优先级,它实优先级,它实际上是际上是CSCS段选择符的第段选择符的第00第第1 1位。位
18、。IOPMIOPM是对所有是对所有VMVM都起作用都起作用的权限机制,它以位(的权限机制,它以位(bitbit)来代表每个端口。某位为来代表每个端口。某位为1 1,则该代表的端口被禁止访问;则该代表的端口被禁止访问;某位为某位为0 0,则允许访问该位所,则允许访问该位所代表的端口。代表的端口。1 1、保护模式下、保护模式下I/OI/O访问访问 约定:约定:IOPL为为0。17C机的高级编程技术共74页,您现在浏览的是第17页!3 3、VxDsVxDs捕获的捕获的I/OI/O端口端口18C机的高级编程技术共74页,您现在浏览的是第18页!特权切换:特权切换:中断处理程序中断处理程序特权级为特权级
19、为0;转移后转移后DPLCPLDPLCPL时,运行中断处理程序。时,运行中断处理程序。Win32Win32程序程序虚拟机虚拟机VxDVxD中中的回调的回调函数函数 VPICD VPICDINT xINT xCALLCALLRETRETIRETIRET硬件中断硬件中断IRETIRET异常处理程序异常处理程序 思考:思考:如何使自己从用户级转到核心级?如何使自己从用户级转到核心级?利用保护模式下中断的处理流程。利用保护模式下中断的处理流程。19C机的高级编程技术共74页,您现在浏览的是第19页!#include stdafx.h#include#include/wtypes.h定义了定义了DWOR
20、DLONG,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;/中断门描述
21、符中断门描述符_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转下页20C机
22、的高级编程技术共74页,您现在浏览的是第20页!四、虚拟设备驱动程序四、虚拟设备驱动程序(VxD)(VxD)基础基础1 1、VxD的程序文件结构的程序文件结构VxD包含五个段:包含五个段:VxD_CODEVxD_CODE(保护模式下的代码段保护模式下的代码段):含设备驱动程序回调例程、:含设备驱动程序回调例程、服务程序、服务程序、APIAPI接口函数和控制程序。接口函数和控制程序。VxD_DATAVxD_DATA(保护模式下的数据段保护模式下的数据段):包含设备描述块、服务表、:包含设备描述块、服务表、全局变量等。全局变量等。VxD_ICODEVxD_ICODE(保护模式下的初始化代码段保护模
23、式下的初始化代码段):初始化时用的服务:初始化时用的服务程序和过程,初始化后被丢弃。程序和过程,初始化后被丢弃。VxD_IDATAVxD_IDATA(保护模式下的初始化数据段保护模式下的初始化数据段):初始化时用的数据,:初始化时用的数据,初始化后被丢弃。初始化后被丢弃。VxD_REAL_INITVxD_REAL_INIT(实模式下的初始化资料与代码实模式下的初始化资料与代码):初始化时调:初始化时调用,该过程返回后被丢弃。用,该过程返回后被丢弃。每个每个VxDVxD装入主存后产生一个对象,每种型号的设备装入主存后产生一个对象,每种型号的设备共用一个共用一个VxD对象。对象。21C机的高级编程
24、技术共74页,您现在浏览的是第21页!3 3、VxDVxD的加载与卸载的加载与卸载 动态加载:动态加载:API函数函数发的消息发的消息功能功能CreateFileSys_Dynamic_Device_Init加载加载VxDDeviceIOControlW32_DeviceIOControl与与VxD进行交互进行交互处理处理CloseHandleSys_Dynamic_Device_Exit卸载卸载VxDhDevicehDevice=CreateFile=CreateFile(.myfirst.vxd,0,0,0,OPEN_EXISTING,.myfirst.vxd,0,0,0,OPEN_EXI
25、STING,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挂钩。挂钩。22C机的高级编程技术共74页,您现在浏览的是第22页!4 4、VMMVMM与与VxDVxD间的消息
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 编程 技术
限制150内