第四章 探索 Windows 2000 的内存管理机制
翻译: Kendiv( fcczj@263.net)
更新: Sunday, February 17, 2005
声明:转载请注明出处 , 并保证文章的完整性 , 本人保留译文的所有权利 。
内存 Dump 工具 ---- 本书示例程序
现在你已经学完了复杂和让人困惑的内存 Spy 设备的 IOCTL 函数的代码 , 你可能想看这些函数运行起来是什么样子 。因此 , 我创建了一个控制台模式的工具 , 名为:“ SBS Windows 2000 Memory Spy ” , 该工具会加载 Spy 驱动程序 , 根据命令行出入的参数 , 它会调用多个 IOCTL 函数 。该程序的可执行文件为: w2k_mem.exe , 其源代码位于本书光盘的 srcw2k_mem 目录下 。
命令行格式
你可以从光盘中运行内存 Spy 工具: d:binw2k_mem.exe , 这里 d: 应该由你的 CD-ROM 盘符代替 。如果无参数启动 w2k_mem.exe , 将会列出冗长的命令信息 , 如 示列 4-1 所示 。W2k_mem.exe 基本的命令体系是:一个命令包含一个或多个数据请求 , 每个命令都至少提供一个线性基址 , 内存 Dump 将从该地址开始 。如果你愿意还可指定内存块的大小 , 不过这是可选的 , 内存块的默认大小是 256。命令中的内存大小必须以“ # ”开始 。可通过增加多个选项来改变命令的默认行为 。一个选项包括一个单字符的选项 ID 和一个“”或“ - ”前缀 。“”或“ - ”表示允许或禁止该选项 。默认情况下 , 所有选项都是允许的 。
// w2k_mem.exe
// SBS Windows 2000 Memory Spy V1.00
// 08-27-2000 Sven B. Schreiber
// sbs@orgon.com
Usage: w2k_mem { { [ option|-option] [/] } [#[[0]x]] [[0]x]
specifIEs a module to be loaded into memory.
Use thex/-x switch to enable/disable its startup code.
Ifis missing, the default size is 256 bytes.
Display address options (mutually exclusive):
z -z zero-based display on / OFF
r -r physical RAM addresses on / OFF
Display mode options (mutually exclusive):
w -w Word data formatting on / OFF
d -d DWORD data formatting on / OFF
q -q QWORD data formatting on / OFF
Addressing options (mutually exclusive):
t -t TEB-relative addressing on / OFF
f -f FS-relative addressing on / OFF
u -u user-mode FS:[
k -k kernel-mode FS:[
h -h handle/object resolution on / OFF
a -a add bias to last base on / OFF
s -s sub bias from last base on / OFF
p -p pointer from last block on / OFF
System status options (cumulative):
o -o display OS information on / OFF
c -c display CPU information on / OFF
g -g display GDT information on / OFF
i -i display IDT information on / OFF
b -b display contiguous blocks on / OFF
Other options (cumulative):
x -x execute DLL startup code on / OFF
Example: The following command displays the first 64
bytes of the current Process Environment Block (PEB)
in zero-based DWORD format, assuming that a pointer to
the PEB is located at offset 0x30 inside the current
Thread Environment Block (TEB):
w2k_memt #0 0pzd #64 0x30
Note: Specifying #0 aftert causes the TEB to be
addressed without displaying its contents.
示列 4-1. 内存 Spy 工具的帮助信息
每个命令行所执行的数据请求不等同于选项 , 数据大小的说明 , 路径或任何其他的命令修饰成分 。命令中的每个无格式的数字都被假定是一个线性地址 , 并且将从该地址开始 , 按 16 进制显示其内容 。数字默认按 10 进制格式解释 , 如果有前缀“ 0x ”或“ x. ”则按照 16 进制格式解释 。
如果提供一些简单的示例 , 很容易掌握 w2k_mem.exe 采用的复杂命令行选项 , 下面就给出一些:
l w2k_mem 0x80400000 显示从线性地址 0x80400000 开始的 256 个字节 , 产生的内容可能会类似于示列 4-2。顺便说一下 , 这是 ntoskrnl.exe 的 Dos stub (注意开始的“ MZ ” ID ) 。
推荐阅读
- 怀旧服暗月马戏团时间
- 如何在Windows2000中动态禁用/启用Ctrl-Alt-Delete
- 部分未公开的Windows 2000核心功能调用
- Windows 2000服务器配置攻略
- 关掉Windows 2000不必要的服务
- Windows 2000的“隐形”武器
- Windows 2000 快速查找文件
- 获得Windows 2000的帮助信息
- Windows 2000 用户和计算机帐户管理
- 三国演义中文丑被谁杀的