当前位置:首页 > 网络编程 > 软件语言 > 汇编 > 客户寄存器结构

客户寄存器结构

点击次数:30 次 发布日期:2008-11-10 08:14:17 作者:源代码网
源代码网推荐
广告载入中
客户寄存器结构:

源代码网整理以下  我们将学习本教程中另外一个重要的结构,叫客户寄存器结构。在本文中,V86指虚拟8086模式。在这里下载例子程序

源代码网整理以下理论

源代码网整理以下VxDs与正常的win32/win16/DOS应用程序有很大不同。大多数情况下,当其他应用程序正常工作时,它们是休眠的。它们象一个监管者一样工作,其作用是监视ring-3应用程序并在其出错时改正它们。下面是其工作时的典型的情况:

软件开发网 www.mscto.com

源代码网整理以下1、中断发生时
源代码网推荐 2、VMM得到控制权时
源代码网推荐 3、VMM存贮寄存器组的值时
源代码网推荐 4、VMM服务于中断或调用其他VxDs完成此工作时
源代码网推荐 5、VMM交还控制权给被中断的程序时

源代码网整理以下在以上过程中令人感兴趣的是,VMM只有这一种方式能影响被中断的应用程序,即修改存储的寄存器映象。例如,VMM认为被中断的程序应该返回到另外一个地址,它就修改存储的寄存器映象中CS:IP的值,当这个程序被重新分派时,它将在新的CS:IP处开始执行。

源代码网整理以下VMM在客户寄存器结构中存储中断点处的寄存器值。

源代码网整理以下Client_Reg_Struc STRUC
源代码网推荐 Client_EDI DD ?
源代码网推荐 Client_ESI DD ?
源代码网推荐 Client_EBP DD ?
源代码网推荐 Client_res0 DD ?
源代码网推荐 Client_EBX DD ?
源代码网推荐 Client_EDX DD ?
源代码网推荐 Client_ECX DD ?
源代码网推荐 Client_EAX DD ?
源代码网推荐 Client_Error DD ?
源代码网推荐 Client_EIP DD ?
源代码网推荐 Client_CS DW ?
源代码网推荐 Client_res1 DW ?
源代码网推荐 Client_EFlags DD ?
源代码网推荐 Client_ESP DD ?
源代码网推荐 Client_SS DW ?
源代码网推荐 Client_res2 DW ?
源代码网推荐 Client_ES DW ?
源代码网推荐 Client_res3 DW ?
源代码网推荐 Client_DS DW ?
源代码网推荐 Client_res4 DW ?
源代码网推荐 Client_FS DW ?
源代码网推荐 Client_res5 DW ?
源代码网推荐 Client_GS DW ?
源代码网推荐 Client_res6 DW ?
源代码网推荐 Client_Alt_EIP DD ?
源代码网推荐 Client_Alt_CS DW ?
源代码网推荐 Client_res7 DW ?
源代码网推荐 Client_Alt_EFlags DD ?
源代码网推荐 Client_Alt_ESP DD ?
源代码网推荐 Client_Alt_SS DW ?
源代码网推荐 Client_res8 DW ?
源代码网推荐 Client_Alt_ES DW ?
源代码网推荐 Client_res9 DW ?
源代码网推荐 Client_Alt_DS DW ?
源代码网推荐 Client_res10 DW ?
源代码网推荐 Client_Alt_FS DW ?
源代码网推荐 Client_res11 DW ?
源代码网推荐 Client_Alt_GS DW ?
源代码网推荐 Client_res12 DW ?
源代码网推荐 Client_Reg_Struc ENDS

源代码网整理以下你可以看到这个结构分为两个部分:Client_xxx和Client_Alt_xxx。在这稍作说明,在一个给定的VM中,可能有两个运行的线程:V86和保护模式。当V86程序运行时,假如一个中断产生,Client_xxx将包含V86程序的寄存器映象,Client_Alt_xxx将包含保护模式程序的寄存器映象。相应的,当保护模式程序运行时,假如一个中断产生,Client_xxx将包含保护模式程序的寄存器映象,Client_Alt_xxx将包含V86程序的寄存器映象。Client_resX被保留而没有使用。

软件开发网 www.mscto.com

源代码网整理以下在查看过这个结构后,你可能有一问题:怎样改变寄存器中的一个字节,比如al?上面的结构仅仅描述了字和双字大小的寄存器组。不用担心,在vmm.inc找一找。那有两个为此附加的结构:Client_Word_Reg_Struc和Client_Byte_Reg_Struc。假如你想以字或字节大小来访问寄存器,根据你的需要转换Client_Reg_Struc到Client_Word_Reg_Struc或Client_Byte_Reg_Struc。

源代码网整理以下下一个问题:我们如何得到一个指向客户寄存器结构的指针?

源代码网整理以下这相当简单:一般地,当VMM调用我们的VxD时,把客户寄存器结构的地址放在ebp中。在这里的客户寄存器结构是当前VM的。你可以从VM的句柄中得到这个指针。记住,VM的句柄是VM控制块的线性地址。

源代码网整理以下cb_s STRUC

源代码网整理以下CB_VM_Status DD ?
源代码网推荐 CB_High_Linear DD ?
源代码网推荐 CB_Client_Pointer DD ?
源代码网推荐 CB_VMID DD ?
源代码网推荐 CB_Signature DD ?

源代码网整理以下cb_s ENDS


源代码网推荐

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华