Debugging Tools for Windows |
数字号(#)命令在反汇编代码中搜索符合指定模板的数据。
模式 | 用户模式、内核模式 |
目标 | 活动目标、崩溃转储 |
平台 | 所有 |
如果之前使用过#命令并且省略掉Address ,会从上次搜索结束的地方开始搜索。
该命令通过搜索反汇编文本来查找指定的模板。可以使用该命令来查找寄存器名、常数或其他任何在反汇编输出中出现的字符串。可以反复使用不带Address 参数的命令来顺序查找匹配模板的项。
可以使用u (Unassemble)命令或在WinDbg反汇编窗口中查看反汇编代码。反汇编的输出包含四个部分:地址偏移、二进制代码、汇编语言助记符合汇编语言详细信息。下面是这种显示的例子。
0040116c fc cld
0040116d 8945b0 mov eax,[ebp-0x1c]
#命令可以在反汇编输出的任意单独部分中搜索文本。例如,使用# eax 0040116b 来在0040116d 地址查找mov eax,[ebp-0x1c] 指令。下面的命令也能搜索到该指令。
# mov 0040116b
# 8945* 0040116b
# 116d 0040116b
但是,不能将mov eax*作为单独的单元来进行搜索,因为mov 和eax 出现在输出的不同部位。
另一个示例,可以使用下面的命令在入口点main 中查找对strlen 的第一个引用。
类似的,可以使用下面两个命令来查找0x779F9FBA 之后的第一个jnz 指令,并再查找之后的下一条jnz 指令。
省略Pattern 或Address 时,他们的值由上一次的#命令决定。如果第一次使用#命令时省略掉它们中的一个,则不会进行搜索。但是即使在这种情况下Pattern 和Address 的值也会被初始化。
如果包含了Pattern 或Address,它的值被设置成输入的值。如果省略Address,它会被设置为程序计数器的当前值。如果省略掉Pattern ,会被设置为任意的空模板。
关于汇编调试和相关命令的更多信息,查看汇编模式下的调试。