Debugging Tools for Windows |
s 命令搜索内存查找指定模板。
不要将该命令和~s (Change Current Processor)、~s (Set Current Thread)、|s (Set Current Process)或 ||s (Set Current System)命令混淆。
s -[[Flags]]v Range Object
s -[[Flags]]sa Range
s -[[Flags]]su Range
可以指定下面这些标志的一个或多个:
类型 | 说明 |
---|---|
b | Byte (8位) |
w | WORD (16位) |
d | DWORD (32位) |
q | QWORD (64位) |
a | ASCII string (不一定要null结尾的字符串) |
u | Unicode string (不一定要null结尾的字符串) |
如果省略掉Type,则会使用字节值。但是如果使用Flags,就不能省略Type。
模式 | 用户模式、内核模式 |
目标 | 活动目标,崩溃转储 |
平台 | 所有 |
如果用调试器查找指定的字节模板,则会显示Range 内存区域中匹配模板的内容的第一个内存地址。调试器会以匹配Type 内存类型的格式显示以该位置开始的内存的摘要信息。如果Type 是 a 或u,则显示内存内容和相应的ASCII或Unicode字符。
如果没有指定其他Type 值,Pattern 必须指定一系列字节。可以输入字节值作为数值或ASCII字符:
注意 默认基数的特性在使用C++表达式时不同。关于这些表达式和基数的更多信息,查看表达式求值。
如果指定多个字节,必须用空格分开它们。
s-a 和s-u 命令分别用来搜索指定的ASCII和Unicode字符串。这些字符串不一定要null结尾。
s-sa 和s-su 命令搜索未指定的ASCII和Unicode字符串。这在检查某段内存是否包含可打印字符时有用。
s-v 命令搜索和Object 对象有相同类型的对象。该命令只能用来搜索C++ 类对象或和虚函数表(Vtables)关联的其他对象。s-v命令在 Range 内存区域中搜索类的Vtables 。如果该类有多个Vtables ,搜索算法查找被一些固有的字节分开的所有的指针值。如果找到了任何普配,调试器返回对象的基地址和完整信息 — 类似dt (Display Type)命令的输出。
下面的代码示例了如何使用s命令。假设当前基数是16,下面的命令在0012FF40 到0012FF5F的内存中搜索"Hello"。
下面的命令有相同作用。
这个s-a命令也有相同作用。
这些命令定位"Hello"出现的每个地方并返回每个模板匹配项的地址 — 即字母"H"的地址。
调试器只返回搜索区域中完整包含模板的位置。重叠的模板也能被正确找出来。 (即,在"QQQQQ"中,会找到三个"QQQ"模板。)
下面是使用Type 参数进行搜索的示例。该命令在0012FF40 到0012FF5F的内存位置搜索双字'VUTS':
在小尾(little-endian)计算机上,'VUTS' 和字节模板'S' 'T' 'U' 'V'一样。但是,对WORD、DWORD和QWORD的搜索只返回正确的字节对齐的结果。
关于内存操作和的更多信息何内存相关命令的说明,查看读写内存。