📄 lesson703.htm
字号:
<html>
<head>
<title>看雪学苑</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
.p8 { font-size: 8pt}
.p9 { font-size: 9pt}
a:hover { color: #00FF00}
a { text-decoration: none}
.p12 { font-size: 12pt; font-weight: bold; color: #FF3333}
-->
</style>
</head>
<body bgcolor="#FFFFFF" vlink="#0033CC">
<table width="80%" border="1" cellspacing="0" cellpadding="0" align="center" bgcolor="#99CCFF" bordercolorlight="#99CCFF" bordercolordark="#99CCFF">
<tr>
<td width="72%" class="p9"><a href="javascript:if(confirm('http://toye.yeah.net/ \n\n这个文件不能通过 Teleport Pro 取回, 因为 它被访问于一个域或在它的起始地址边界外部的路径上. \n\n你想从服务器打开它吗?'))window.location='http://toye.yeah.net/'" tppabs="http://toye.yeah.net/">看雪教学</a></td>
<td width="10%" class="p9"> </td>
<td width="10%"><a href="index.htm" tppabs="http://toye.dihou.org/index.htm" class="p9">返回<br>
首页 <br>
</a></td>
<td width="8%"><a href="molu.htm" tppabs="http://toye.dihou.org/molu.htm" class="p9">返回<br>
目录 </a></td>
</tr>
</table>
<table width="80%" cellspacing="0" cellpadding="0" align="center">
<tr bgcolor="#FFFF33">
<td>
<div align="center"><span class="p"><font color="#000000" class="p12">第七课
TRW2000操作手册</font></span></div>
</td>
</tr>
</table>
<table width="80%" border="0" cellspacing="0" align="center">
<tr class="p9">
<td width="46%" bgcolor="#CCFFFF">
<div align="center">第二节 <a href="lesson701.htm" tppabs="http://toye.dihou.org/lesson701.htm">TRW2000操作手册</a></div>
</td>
<td bgcolor="#FFFFFF" width="54%">
<div align="center">第三节 TRW2000插件开发介绍</div>
</td>
</tr>
</table>
<span class="p9">-------------------------------------------------<br>
TRW2000插件开发介绍<br>
-------------------------------------------------<br>
插件是TRW2000的功能扩展。它,TRW2000的内核和其实插件一起为使用者提供各类功能。插件是被TRW2000内核动态连接的,这就意味着它并非是一个内部组件,是可以代替的。</span>
<p><span class="p9">插件很灵活,它可以很简单地开发来实现各种希望的功能。例如写一个显示的驱动程式。换言之,你可以开发特别的调试器而不须要开发驱动程式,反汇编程式,正汇编程式,屏幕界面。。。<br>
对于Cracker来说,这方面的意义就更大了。</span></p>
<p><span class="p9">-------------------------------------------------<br>
现在来开始着手开发你自己的插件吧!<br>
-------------------------------------------------<br>
如果你要着手开发插件,你必须有以下的开发工具。你要有:</span></p>
<p><span class="p9">Visual C++(建议采用6.0)<br>
Win98DDK开发包</span></p>
<p><span class="p9">如你没有这个开发包,不要紧,你可以免费从以下网址下载得到:<br>
http://www.microsoft.com/ddk</span></p>
<p><span class="p9">注意:</span></p>
<p><span class="p9">你要在安装后对I386MK.INC文件进行修改(它位于<98DDK的安装目录下的INC目录里>):<br>
1.找STDFLAGS= /c /Zel /Zp8 /Gy ...,<br>
改/Zp8为/Zp1。<br>
2.找{i386\}.asm{$(_OBJ_DIR)\i386\}.obj:<br>
$(386_ASSEMBLER) -Fo$(MAKEDIR)\$@ $<<br>
删除前面的{i386\}变为:<br>
.asm{$(_OBJ_DIR)\i386\}.obj:<br>
$(386_ASSEMBLER) -Fo$(MAKEDIR)\$@ $<</span></p>
<p><span class="p9">然后,在Windows的开始菜单里单击"Check"或"Free"环境的图标,这样,我们就可以进行编译程式了。<br>
-------------------------------------------------<br>
编译参考:<br>
-------------------------------------------------<br>
插件的扩展名为.SYS,它实际上是一个WDM驱动程式。</span></p>
<p><span class="p9"><br>
在编译之前,你的代码存放目录下还必须有另外的两个文件:</span></p>
<p><span class="p9">MAKEFILE和SOURCES(没有扩展名)文件。 </span></p>
<p><span class="p9">MAKEFILE文件如以下所列:<br>
###########################################################<br>
#<br>
# Microsoft Confidential<br>
# Copyright (C) Microsoft Corporation 1995<br>
# All Rights Reserved.<br>
# <br>
# MAKEFILE for WDM device driver kit<br>
#<br>
###########################################################</span></p>
<p><span class="p9">#<br>
# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source<br>
# file to this component. This file merely indirects to the real make file<br>
# that is shared by all the driver components of the Windows NT DDK<br>
#</span></p>
<p><span class="p9">!INCLUDE $(NTMAKEENV)\makefile.def</span></p>
<p> <span class="p9"><br>
SOURCES is following as below :<br>
SOURCES文件如以下所列:</span></p>
<p><span class="p9">TARGETNAME=xxxx<br>
TARGETTYPE=DRIVER<br>
DRIVERTYPE=WDM<br>
TARGETPATH=.</span></p>
<p><span class="p9">BLDCRT=1</span></p>
<p><span class="p9">INCLUDES=$(BASEDIR)\inc</span></p>
<p><span class="p9">SOURCES=xxxx.CPP( xxxx_2.CPP, xxxx_3.CPP... )</span></p>
<p><span class="p9">I386_SOURCES=xxxx.ASM( xxxx_2.ASM, xxxx_3.ASM... )<br>
<br>
( xxxx 就是你插件的名称 )</span></p>
<p><span class="p9">如果你已经生成了这些文件,你可以在命令等输入"BUILD"来建立你的<br>
WDM文件了(插件)。</span></p>
<p><span class="p9">如果你选择"Checked Environment",它会在<SOURCES目录\I386\Checked>下建立一个带有Debug信息的WDM。如果人选择"Free
Environment",它会在<br>
<SOURCES目录\I386\Free>下建立一个发行版本的WDM。</span></p>
<p><span class="p9">编译过程会被记录到BUILD.LOG,错误信息会被记录到BUILD.ERR和警告信息会被记录到BUILD.WRN,它们都位于源程序的同一目前。</span></p>
<p><span class="p9">你可以运行"BUILD"工具(Win98DDK自带)去编译和连接插件。</span></p>
<p><span class="p9">但这里有一些奇怪的问题:</span></p>
<p><span class="p9">BUILD会编译你的CPP文件和创建一个..\I386的目前,但它不会创建 ..\I386\Checked和..\I386\Free两个目录,它会显示一些错误信息和连接失败。最简单的解决方法就是:手动帮它创建这两上目录。</span></p>
<p><span class="p9">并且,如果你创建一个发行版的WDM,注意:它一样带有调试信息。解决的方法,你一定要这样做:</span></p>
<p><span class="p9">DUMPBIN /HEADERS xxxx.sys |MORE <br>
记录下OPTIONAL HEADER VALUES的map-base地址,通常都是0x10000。</span></p>
<p><span class="p9">使用命令" REBASE -B 0x10000 -X .\Symbol xxxx.sys "去删除那调试信息。如果你想得到更多的信息,访问一下相关的网站和新闻组吧。<br>
Art Baker: The Windows NT Device Driver Book: A Guide for<br>
Programmers, 1997, published by Prentics Hall, INC.</span></p>
<p><span class="p9">当然,最简单直接的方法是复制/粘贴每个例子自带的MK.BAT,SOURCES和MAKEFILE来作为建立你的插件基础。<br>
-------------------------------------------------<br>
插件开发指南<br>
-------------------------------------------------<br>
让我们来开始第一个插件吧。每一个插件都必须定义以下的格式:<br>
//这个文件的扩展名必须是.CPP。<br>
extern "C" {<br>
#include <wdm.h><br>
}</span></p>
<p><span class="p9">//它定义WDM。<br>
#include "..\INCLUCE\PLUGS.H"<br>
//它定义数据类型和函数类型。<br>
extern "C" NTSTATUS<br>
DriverEntry(IN PDRIVER_OBJECT DriverObject, <br>
IN PUNICODE_STRING RegistryPath);</span></p>
<p><span class="p9">VOID<br>
Plugs_Unload(IN PDRIVER_OBJECT DriverObject);</span></p>
<p><span class="p9">extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT
DriverObject, IN PUNICODE_STRING RegistryPath)<br>
{<br>
NTSTATUS ntStatus = STATUS_SUCCESS;</span></p>
<p><span class="p9"> DriverObject->DriverUnload = Plug-ins_Unload;</span></p>
<p><span class="p9"> return ntStatus;<br>
}</span></p>
<p><span class="p9">VOID<br>
Plug-ins_Unload(IN PDRIVER_OBJECT DriverObject)<br>
{<br>
}<br>
//这是WDM的格式,每一个插件都会有这样的代码。<br>
/************ 插件的初始化和退出部分 **************/<br>
PLUGS_API* api = 0;</span></p>
<p><span class="p9">//这里是TRW2000的API指针。插件呼叫TRW2000的API时,一定要采用下面的方式:<br>
// TRW2000_api->Get_TRW2000_Version ( ) ;</span></p>
<p><span class="p9">EXC EXPORT BOOL Plugs_Init ( PLUGS_API* plugsapi )<br>
{<br>
TRW2000_api = api;</span></p>
<p><span class="p9"> //添加你的代码。</span></p>
<p><span class="p9"> return TRUE;<br>
<br>
//如果返回FALSE,这个插件就不会被加载。<br>
}</span></p>
<p><span class="p9">EXC EXPORT BOOL Plugs_Exit ( )<br>
{<br>
<br>
//增加你的代码。<br>
return TRUE;<br>
//必须返回TRUE。<br>
}</span></p>
<p><span class="p9">好的,如果你还有疑问,就去看一看插件的例子程式吧!<br>
再见<br>
Copyright(C) 2000. KnlSoft. Inc. <br>
http://www.knlsoft.com</span></p>
<p><span class="p9">翻译:RuFeng<br>
时间:2000年4月11日</span></p>
<table width="80%" border="1" cellspacing="0" cellpadding="0" align="center" bgcolor="#99CCFF" bordercolorlight="#99CCFF" bordercolordark="#99CCFF">
<tr>
<td width="82%" class="p8" height="34">Copyright @看雪 2000 All rights reserved
<a href="mailto:toye@126.com">与我联系</a></td>
<td width="10%" class="p9" height="34"><a href="index.htm" tppabs="http://toye.dihou.org/index.htm">返回<br>
首页</a></td>
<td width="8%" class="p8" height="34"><a href="molu.htm" tppabs="http://toye.dihou.org/molu.htm" class="p9">返回<br>
目录</a></td>
</tr>
</table>
<p> </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -