精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● 软件使用>>★软件课堂★>>Soft-ice使用手册>>Soft-ice使用手册 四章五回12

主题:Soft-ice使用手册 四章五回12
发信人: sanvador()
整理人: webfan(2000-08-08 20:50:36), 站内信件

/SOURCE:<path-list>
使用/SOURCE选项来指定NMSYM搜索源文件的路径。在转换时(仅PACKAGE指令)或
模块载入时(/LOAD或/SYMLOAD),NMSYM要找到所有在NMS符号表里指定的源文件
。缺省情况下它将在指定路径里寻找文件。
Path-list指令是连接在一起的一个或多个路径。每一个路径都是由一个分号(;
)和前面的路径隔开。/SOURCE选项可以用单独的命令行来指定多次。/SOURCE语
句的顺序和在路径指令中路径的顺序决定了搜索顺序。
使用/SOURCE选项的例子:
下面的例子指定两个路径 来定位源文件:
NMSYM /TRANSLATE:PACKAGE /SOURCE:c:\myproj\i386;c:\myproj\include; myp
roj.exe
下面的例子指定了源文件路径的两个集合:
NMSYM /TRANSLATE:PACKAGE /SOURCE:c:\myproj\i386;c:\myproj\include;
/SOURCE:c:\msdev\include; myproj.exe
下面的例子以基本方式指定了源文件的路径,还使用了DOS替换操作符%,利用标
准环境变量INCLUDE=来指定包含文件的路径。路径列表扩展到包括c:\myproj\i3
86 和任何由INCLUDE=环境变量所指定的路径。
NMSYM /TRANS:PACKAGE /SOURCE:c:\myproj\i386;%INCLUDE% myproj.exe
注意:当源代码文件不能打开时,/PROMPT开关决定这个文件是被忽略,还是向你
寻求帮助以定位文件。
/OUTPUT:<filename>
NMSYM从启动模块名中得到NMS符号表输出文件的文件名并附加上NM32符号表的标
准文件扩展名:.NMS。而且,这个.NMS文件的路径与模块被转换的路径一致。如
果你要改变NM32符号表缺省的名字或位置,使用/OUTPUT选项来指定位置和名字。
如果你仅指定文件名而没指定路径,它将使用模块所在的路径。
/OUTPUT选项的例子:
下面例子中NMS文件路径改变到NM32符号表文件的通用路径下:
NMSYM /OUTPUT:c:\ntice\symbols\myproj.nms c:\myproj\myproject.exe
/PROMPT
NMSYM是一个命令行工具,设计用于使符号转换和载入任务自动完成。因此,你可
能在缺少源文件是被提醒,不过有些场合也许那些文件有用处。使用/PROMPT选项
指定NMSYM在使用
/TRANSLATE:PACKAGE,/LOAD,/SYMLOAD选项时是否要你帮助以定位源文件。

  使用NMSYM来装入或导出符号表
象转换一样,NMSYM里为/LOAD设计的功能是工作于指定模块上的,通过使用指定
的模块名参数。这个模块将被转换和载入。如果你不需要转换或载入并执行模块
,使用/SYMLOAD选项可能是更好的选择。
使用NMSYM进行转换、载入并运行的例子:
NMSYM /TRANS:PACKAGE /LOAD:EXECUTE myproj.exe
下面的例子展示了可选的功能,使用/SYMLOAD选项载入一组预先转换过的符号文
件:
NMSYM /SYMLOAD:NTDLL.DLL;NTOSKRNL.NMS;NYPROJ.EXE
在上面的例子中,三个符号表被载入,但是没有进行转换,甚至相应模块的.NMS
文件也过期了。还有,NYPROJ.EXE不被执行以使它可以被调试。
/LOAD:<load-specifier-list>
/LOAD选项允许你模块的NM32符号表到SoftICE中,可选的,执行模块以便调试。

在/LOAD中可以使用下面的指令:
载入类型指令:
下面指令中可以选择一个来决定模块和它的符号信息如何被载入。缺省的指令依
赖于模块类型:可执行模块是EXECUTE指令,不可执行模块缺省为SYMBOLS指令。

------------------------------ -
载入类型信息            定义
SYMBOLS 仅模块的符号信息被载入。你可以使用这些符号信息来设置断点。
模块装载后在断点会在适当的时候触发。

EXECUTE 符号信息被载入,可执行模块也被作为一个进程载入,以便调试。

------------------------------ -
载入后暂停指令
允许或禁止在模块的入口点设置断点,使用下面的指令之一:
载入后暂停指令          定义
BREAK 在模块的入口点设置断点。

NOBREAK 不在模块的入口点设置断点。

提供明确开关模块入口断点的能力是因为本选项的缺省设置是依赖于模块类型的
。对于应用程序缺省是BREAD,其它类型的模块是NOBREAK。
------------------------------ -
NOSOURCE指令
NOSOURCE禁止载入源代码文件,甚至符号表中包括了源文件包或行数信息。

使用/LOAD选项的例子:
下面的例子中NMSYM将载入并执行MYPROJ.EXE模块。如果符号表不是当前的,将按
模块类型完成缺省的转换。
NMSYM /LOAD MYPORJ.EXE
下一个例子指定程序要执行,但不设置程序入口点的断点。同样的,如果需要先
完成转换,它将按模块类型进行缺省的转换。
NMSYM /LOAD:NOBREAD MYPROJ.EXE
下一个例子指定仅符号信息被载入,并明确指定了PUBLICS转换类型。
NMSYM /TRANS:PUBLIC /LOAD:SYMBOLS MYPROJ.DLL

/ARGS:<program-arguments>
/ARGS选项是用来指定要传递到可执行模块中的程序参数的。此选项仅在使用/LO
AD:EXECUTE时有用。
program-arguments时定义程序参数的字符串。如果它包含空格,你要用双引号(
")包全部选项引起来。
使用/ARGS选项的例子:
下面的例子中,MYPROJ.EXE模块将被载入调试,并且TEST.RTF参数被传递到程序
中。
NMSYM /LOAD:EXECUTE /ARGS:test.rtf myproj.exe
在下一个例子中,命令行有一点复杂,所以我们把全部选项用双引号围绕起来:

NMSYM /LOAD:EXECUTE "/ARGS:/PRINT /NOLOGO test.rtf" myproj.exe 
用双引号环绕选项可以避免NMSYM混淆了出现在程序参数中的空格。

  使用NMSYM载入或导出符号表
除了转换和载入功能,NMSYM也支持成批载入和卸载符号表与导出文件的选项。这
在载入一个"环境"或是相关系列的符号表文件时特别有用。例如,如果你手工启
动SoftICE,你可以利用NMSYM给你相当于SoftICE符号和导出初始化设置一样的能
力。
举例来说,你可以使用如下相似的批处理文件去控制那一个符号表被载入。这个
批处理文件有一个可选参数,用于决定被载入的文件是用于驱动程序还是应用程
序的调试(缺省是应用程序)。两个例子中我们是载入了标准Windows模块导出。


net start ntice
echo off
if "%1" == "D" goto dodriver
if "%1" == "d" goto dodriver
REM *** These are for debugging applications *** set
SYMBOLS=ntdll.dll;shell32.dll;ole32.dll;win32k.sys goto doload
:dodriver REM *** These are for debugging drivers *** set
SYMBOLS=hal.dll;ntoskrnl.exe;
:doload
NMSYM /SYMLOAD:%SYMBOLS% /EXPORTS:kernel32.exe;user32.exe;gdi32.exe

另一个使用NMSYM的好处是它不需要明确的路径信息来找到NMS文件或模块。如果
你不指定路径,NMS文件和模块又不在当前目录和符号表缓存里,搜索将沿着当前
路径进行。
/SYMLOAD:<module-list>
/SYMLOAD选项是将一个或多个符号表装入到SoftICE中。符号表必须预先转换过了
,因为这个函数没有转换功能。
module-list指令指定NMS文件或相关模块,以及可有可无的文件路径。如果你不
为模块明确指定路径,NMSYM将在当前目录中寻找文件,在符号表缓存中、或在系
统路径下。如果你指定了一个模块的绝对或相对路径,它就不会进行搜索。
使用/SYMLOAD选项的例子:
下面的例子使用/SYMLOAD选项装入符号表,是典型的调试OLE程序的例子。它不指
定任何路径,所以会进行搜索(需要的话)。
NMSYM /SYMLOAD:ole32.dll;oleaut32.dll;olecli32.dll

/EXPORTS:<module-list>
/EXPORTS选项用于载入一个或多个模块的导出到SoftICE中。一个模块中关于API
's的导出是简单的符号信息(通常是DLL,但EXEs也可以包含导出)。
module-list指令指定模块。路径信息同上。
使用/EXPORTS选项的例子:
下面的例子使用/EXPORTS选项载入模块的导出,是典型的调试OLE程序的例子。它
不指定任何路径,所以会进行搜索(需要的话)。
NMSYM /EXPORTS:ole32.dll;oleaut32.dll;olecli32.dll

  使用NMSYM卸载符号信息
NMSYM提供/UNLOAD命令选项使你可以程序化的从相关符号表或导出集中删除符号
信息。它可以节约被不需要的符号表所使用的内存。
/UNLOAD:<module-list>
module-list指令可以指定符号表或导出表的名字。符号表或导出表的名字是来源
于根模块名的,没有路径和扩展名信息。为了适应和支持未来表的命名规范,你
应该指定相对不重复的路径或扩展名信息,以便区分。
使用/UNLOAD选项的例子:
下面的例子是修改了在/SYMLOAD和/EXPORTS部分提供的样本。
NMSYM /UNLOAD:ole32.dll;oleaut32.dll;olecli32.dll

SoftICE将找到指定模块所对应的表并删除它(如果可能的话),释放由这些符号
表所使用的内存。
注意:SoftICE缺省为试着卸载符号表。如果指定符号表不存在,SoftICE就试着
卸载同样名称的导出表。

  使用NMSYM来保存历史记录
NMSYM使用/LOGFILE选项提供了将SoftICE历史缓存保存到文件的能力。这个选项
相当于Symbol Loader中 "Save SoftICE History As..."选项。NMSYM使用APPEN
D指令来支持将文件附加到已存在文件中的能力。
/LOGFILE:<filename>[logfile-specifier-list]
filename指令是历史缓存要写入的文件的路径和名字。没有指定路径的话就使用
当前路径。

日志文件指令
APPEND使你将历史缓存中的内容附加到一个存在的文件中去。缺省是覆盖文件。

下面的例子将用当前SoftICE历史缓存中的内容建立/覆盖MYPROJ.LOG文件:
NMSYM /LOGFILE:myproj.log
下一个例子将用当前SoftICE历史缓存中的内容建立/附加MYPROJ.LOG文件:
NMSYM /LOGFILE:myproj.log APPEND
警告:NMSYM并不询问是否要覆盖已存在的文件。它自动写入。

  关于NMSYM的信息
要得到关于NMSYM的信息,使用/VERSION和/HELP选项。
/VERSION
使用/VERSION选项得到NMSYM、SoftICE的版本信息,还有转换器和符号引擎的版
本号。要使SoftICE、Loader32和NMSYM正确的协同工作,它们的版本必须兼容。
每一个产品都要和其它产品比较和校验版本号以确保它们可以一起工作。

/HELP
使用/HELP选项得到命令行语法、选项、指令和选项/指令的语法。
--------------
哎呀,好不容易才把第四章译完了...累死我了!
其实这里面的东西很罗嗦...让我译的很没劲...外国佬的文章,都是这么麻烦吗
....哎呀!

做这么一点东西用了我2小时40分钟...唉..越来越不济了。

---------------------
附:
    我的电子信箱是:     [email protected]

    以前的使用手册可以在网易精华区的《软件使用》栏目里找到...也可以到:

                        Sanvador.yeah.net
站点寻找...呵呵,我的主页很差劲哦!不过过些天我一定改改...希望你可以得
到你需要的东西。
    有什么问题,大家一起讨论讨论吧。

--
无意苦争春
一任群芳妒
零落成泥碾作尘
依旧香如故

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 61.137.191.128]

[关闭][返回]