📄 vxd-c5.htm
字号:
OnVMCreate</FONT></FONT></FONT></B> <BR><B><FONT face=Arial,Helvetica><FONT
size=-1><FONT color=#cccccc> mov ecx, </FONT><FONT
color=#ffcc33>OFFSET32</FONT><FONT color=#cccccc>
VMCreated</FONT></FONT></FONT></B> <BR><B><FONT face=Arial,Helvetica><FONT
color=#cccccc><FONT size=-1>CommonCode:</FONT></FONT></FONT></B> <BR><B><FONT
face=Arial,Helvetica><FONT size=-1><FONT color=#ffcc33>
VMMCall </FONT><FONT color=#cccccc>Get_sys_vm_handle</FONT></FONT></FONT></B>
<BR><B><FONT face=Arial,Helvetica><FONT color=#cccccc><FONT
size=-1> mov
eax,MB_OK+MB_ICONEXCLAMATION</FONT></FONT></FONT></B> <BR><B><FONT
face=Arial,Helvetica><FONT size=-1><FONT color=#cccccc> mov
edi, </FONT><FONT color=#ffcc33>OFFSET32 </FONT><FONT
color=#cccccc>MsgTitle</FONT></FONT></FONT></B> <BR><B><FONT
face=Arial,Helvetica><FONT color=#cccccc><FONT size=-1> xor
esi,esi</FONT></FONT></FONT></B> <BR><B><FONT face=Arial,Helvetica><FONT
color=#cccccc><FONT size=-1> xor
edx,edx</FONT></FONT></FONT></B> <BR><B><FONT face=Arial,Helvetica><FONT
size=-1><FONT color=#cccccc> </FONT><FONT color=#ffcc33>VxDCall
</FONT><FONT color=#cccccc>SHELL_Message</FONT></FONT></FONT></B> <BR><B><FONT
face=Arial,Helvetica><FONT color=#cccccc><FONT size=-1>
ret</FONT></FONT></FONT></B> <BR><B><FONT face=Arial,Helvetica><FONT
size=-1><FONT color=#ffcc33>EndProc </FONT><FONT
color=#cccccc>OnVMCreate</FONT></FONT></FONT></B></BLOCKQUOTE><FONT
face=Arial,Helvetica><FONT size=-1><FONT color=#cccccc>我们用</FONT><B><FONT color=#ffff99>BeginProc</FONT></B><FONT color=#cccccc>和
</FONT><B><FONT color=#ffff99>EndProc</FONT></B><FONT color=#cccccc>宏来创建<B><FONT
color=#ffff99>OnVMCreate</FONT></B>。OnVMCreate函数把调用</FONT><B><FONT
color=#ffff99>SHELL_Message</FONT></B><FONT color=#cccccc>服务所需要的参数放到寄存器里面去。因为我们要在系统虚拟机上显示消息框,所以不能使用ebx中的值(ebx包含了在创建的虚拟机的句柄,而我们要的是系统虚拟机的句柄)。于是,我们用另一个VMM服务,</FONT><B><FONT
color=#ffff99>Get_Sys_VM_Handle</FONT></B><FONT color=#cccccc>来得到系统虚拟机的虚拟机句柄。我们分别把消息的地址和消息框标题的地址放在ecx和edi里面。我们不需要知道客户的反应,所以我们把esi和edx置零。当每个参数都在相应的寄存器内后,我们就调用</FONT><B><FONT
color=#ffff99> SHELL_Message </FONT></B><FONT color=#cccccc>来显示消息框。</FONT></FONT></FONT>
<BLOCKQUOTE><B><FONT face=Arial,Helvetica><FONT size=-1><FONT
color=#ffcc33>BeginProc </FONT><FONT
color=#cccccc>OnVMClose</FONT></FONT></FONT></B> <BR><B><FONT
face=Arial,Helvetica><FONT color=#cccccc><FONT size=-1> mov
ecx,OFFSET32 VMDestroyed</FONT></FONT></FONT></B> <BR><B><FONT
face=Arial,Helvetica><FONT color=#cccccc><FONT size=-1> jmp
CommonCode</FONT></FONT></FONT></B> <BR><B><FONT face=Arial,Helvetica><FONT
size=-1><FONT color=#ffcc33>EndProc</FONT><FONT color=#cccccc>
OnVMClose</FONT></FONT></FONT></B></BLOCKQUOTE><FONT face=Arial,Helvetica><FONT
size=-1><B><FONT color=#ffff99>OnVMClose</FONT></B><FONT color=#cccccc>OnVMClose函数本身是很简单的。因为它要使用的代码和</FONT><B><FONT
color=#ffff99>OnVMCreate</FONT></B><FONT color=#cccccc>相同,所以它在用另一个消息的地址初始化ecx后,就转到</FONT><B><FONT color=#ffff99>OnVMCreate</FONT></B><FONT
color=#cccccc>中的代码去了。</FONT></FONT></FONT>
<H3><FONT face=Arial,Helvetica><FONT color=#66ffff><FONT size=+0>改变定义文件(.def)</FONT></FONT></FONT></H3>
<BLOCKQUOTE><B><TT><FONT color=#cccccc><FONT size=-1>VxD
MESSAGE</FONT></FONT></TT></B><TT></TT>
<P><B><TT><FONT color=#cccccc><FONT size=-1>SEGMENTS</FONT></FONT></TT></B>
<BR><B><TT><FONT color=#cccccc><FONT size=-1>
_LPTEXT CLASS 'LCODE' PRELOAD
NONDISCARDABLE</FONT></FONT></TT></B> <BR><B><TT><FONT color=#cccccc><FONT
size=-1> _LTEXT CLASS
'LCODE' PRELOAD NONDISCARDABLE</FONT></FONT></TT></B>
<BR><B><TT><FONT color=#cccccc><FONT size=-1>
_LDATA CLASS 'LCODE'
PRELOAD NONDISCARDABLE</FONT></FONT></TT></B> <BR><B><TT><FONT
color=#cccccc><FONT size=-1>
_TEXT CLASS
'LCODE' PRELOAD NONDISCARDABLE</FONT></FONT></TT></B>
<BR><B><TT><FONT color=#cccccc><FONT size=-1>
_DATA CLASS
'LCODE' PRELOAD NONDISCARDABLE</FONT></FONT></TT></B>
<BR><B><TT><FONT color=#cccccc><FONT size=-1>
CONST CLASS
'LCODE' PRELOAD NONDISCARDABLE</FONT></FONT></TT></B>
<BR><B><TT><FONT color=#cccccc><FONT size=-1>
_TLS CLASS
'LCODE' PRELOAD NONDISCARDABLE</FONT></FONT></TT></B>
<BR><B><TT><FONT color=#cccccc><FONT size=-1>
_BSS CLASS
'LCODE' PRELOAD NONDISCARDABLE</FONT></FONT></TT></B>
<BR><B><TT><FONT color=#cccccc><FONT size=-1>
_LMGTABLE CLASS 'MCODE' PRELOAD
NONDISCARDABLE IOPL</FONT></FONT></TT></B> <BR><B><TT><FONT
color=#cccccc><FONT size=-1> _LMSGDATA
CLASS 'MCODE' PRELOAD NONDISCARDABLE
IOPL</FONT></FONT></TT></B> <BR><B><TT><FONT color=#cccccc><FONT
size=-1> _IMSGTABLE CLASS
'MCODE' PRELOAD DISCARDABLE IOPL</FONT></FONT></TT></B>
<BR><B><TT><FONT color=#cccccc><FONT size=-1>
_IMSGDATA CLASS 'MCODE' PRELOAD
DISCARDABLE IOPL</FONT></FONT></TT></B> <BR><B><TT><FONT color=#cccccc><FONT
size=-1> _ITEXT CLASS
'ICODE' DISCARDABLE</FONT></FONT></TT></B> <BR><B><TT><FONT
color=#cccccc><FONT size=-1>
_IDATA CLASS 'ICODE'
DISCARDABLE</FONT></FONT></TT></B> <BR><B><TT><FONT color=#cccccc><FONT
size=-1> _PTEXT CLASS
'PCODE' NONDISCARDABLE</FONT></FONT></TT></B>
<BR><B><TT><FONT color=#cccccc><FONT size=-1>
_PMSGTABLE CLASS 'MCODE' NONDISCARDABLE
IOPL</FONT></FONT></TT></B> <BR><B><TT><FONT color=#cccccc><FONT
size=-1> _PMSGDATA CLASS
'MCODE' NONDISCARDABLE IOPL</FONT></FONT></TT></B>
<BR><B><TT><FONT color=#cccccc><FONT size=-1>
_PDATA CLASS 'PDATA'
NONDISCARDABLE SHARED</FONT></FONT></TT></B> <BR><B><TT><FONT
color=#cccccc><FONT size=-1>
_STEXT CLASS 'SCODE'
RESIDENT</FONT></FONT></TT></B> <BR><B><TT><FONT color=#cccccc><FONT
size=-1> _SDATA CLASS
'SCODE' RESIDENT</FONT></FONT></TT></B> <BR><B><TT><FONT
color=#cccccc><FONT size=-1> _DBOSTART
CLASS 'DBOCODE' PRELOAD NONDISCARDABLE CONFORMING</FONT></FONT></TT></B>
<BR><B><TT><FONT color=#cccccc><FONT size=-1>
_DBOCODE CLASS 'DBOCODE' PRELOAD NONDISCARDABLE
CONFORMING</FONT></FONT></TT></B> <BR><B><TT><FONT color=#cccccc><FONT
size=-1> _DBODATA CLASS
'DBOCODE' PRELOAD NONDISCARDABLE CONFORMING</FONT></FONT></TT></B>
<BR><B><TT><FONT color=#cccccc><FONT size=-1>
_16ICODE CLASS '16ICODE' PRELOAD
DISCARDABLE</FONT></FONT></TT></B> <BR><B><TT><FONT color=#cccccc><FONT
size=-1> _RCODE CLASS
'RCODE'</FONT></FONT></TT></B><TT></TT>
<P><B><TT><FONT color=#cccccc><FONT
size=-1>EXPORTS</FONT></FONT></TT></B><TT></TT>
<P><B><TT><FONT color=#cccccc><FONT size=-1>
MESSAGE_DDB @1</FONT></FONT></TT></B></P></BLOCKQUOTE>
<H3><FONT face=Arial,Helvetica><FONT color=#66ffff><FONT size=+0>汇编过程:</FONT></FONT></FONT></H3><B><FONT face=Arial,Helvetica><FONT
color=#cccccc><FONT size=-1> ml -coff -c -Cx -DMASM6 -DBLD_COFF
-DIS_32 message.asm</FONT></FONT></FONT></B>
<P><B><FONT face=Arial,Helvetica><FONT color=#cccccc><FONT size=-1> link
-VxD -def:message.def message.obj</FONT></FONT></FONT></B>
<H3><FONT face=Arial,Helvetica><FONT color=#66ffff><FONT size=+0>VxD 的安装:
<LI><FONT face=Arial,Helvetica><FONT color=#cccccc><FONT size=-1>把message.VxD放到\system目录下。</FONT></FONT></FONT>
<LI><FONT face=Arial,Helvetica><FONT color=#cccccc><FONT size=-1>在system.ini文件里的[386enh]部分里加上如下的一行:</FONT></FONT></FONT>
<OL>
<FONT face=Arial,Helvetica><FONT color=#cccccc><FONT
size=-1>device=message.VxD</FONT></FONT></FONT>
</OL>
<LI><FONT face=Arial,Helvetica><FONT color=#cccccc><FONT size=-1>重启你的计算机。</FONT></FONT></FONT>
</LI>
<H3><FONT face=Arial,Helvetica><FONT color=#66ffff><FONT size=+0>测试这个VxD:</FONT></FONT></FONT></H3>
<FONT face=Arial,Helvetica><FONT
color=#cccccc><FONT size=-1>打开一dos窗口,你会看到弹出的消息框,显示“A VM is created."。当你关闭一个dos窗口,又会弹出一个消息框显示“A
VM is destroyed"。</FONT></FONT></FONT> <BR>
</font></font></font></h3>
<hr size="1">
<div align="center">
<script language="JavaScript1.1" src=http://ad.t2t2.com/textclick.asp?user=bigluo&style=4&bkcolor=no></script>
<br>
</div>
<!-- 10:1 文本广告交换 -->
<div align="center">
<script language="JavaScript1.1" src=http://coolsite21.com:90/c21.dll?Type=PT&id=1047&col=6&ReferID=1047&v=0></script>
<!-- 10:1 文本广告交换 --> </div>
<hr size="1">
<br>
<div align="center"> 由 Ryo 翻译,发表于 <a href="http://asm.yeah.net">http://asm.yeah.net</a>,英文版本来自
[<a href="http://win32asm.cjb.net/">Iczelion's Win32 Assembly Homepage</a>]
</div>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -