windbg----as、$u0(固定别名、自定义别名)

时间:2023-03-08 18:19:19
windbg----as、$u0(固定别名、自定义别名)

固定别名($u0~$u9)

  有10个固定别名。他们是$u0, $u1, ..., $u9。他们的等价字符串可以是不包含ENTER键的任意字符串。使用r (Registers)命令为固定别明指定等价字符串。定义固定别名时,必须在字母"u"之前插入点号(.)。等号(=)之后的文本是等价字符串。等价字符串可以包含空格或分号,但是头部和尾部的空格被忽略掉。不能用引号将等价字符串括起来(除非希望替代结果中包含引号)。

  注意 r (Registers)命令设置固定别名容易混淆。这些别名不是寄存器或伪寄存器,即使使用了r命令来设置了他们的等价字符串。这些别名前不需要添加at符号(@),也不能使用r命令来显示这些别明的值。默认情况下,如果没有定义固定别名,他们是空字符串。

:> r $.u0 = test1!wmain
:> .echo $u0
test1!wmain
:> u $u0 L2
test1!wmain [d:\windbg\test1\test1.cpp @ ]:
01071a40 push ebp
01071a41 8bec mov ebp,esp 注意是$.u0

自定义别名

as 和aS 命令定义一个新的别名或重新定义已存在的别名

语法:

as Name EquivalentLine
aS Name EquivalentPhrase
aS Name "EquivalentPhrase"
as /e Name EnvironmentVariable
as /ma Name Address
as /mu Name Address
as /msa Name Address
as /msu Name Address
as /x Name Expression
aS /f Name File
as /c Name CommandString

/e 设置别名的值为EnvironmentVariable 指定的环境变量。

/ma将别名的等价值设置为从地址Address 开始的null结尾的ASCII字符串。

/mu将别名的等价值设置为从地址Address 开始的null结尾的Unicode字符串。

/msa将别名的等价值设置为从地址Address 开始的null结尾的ANSI_STRING结构。

/msu将别名的等价值设置为从地址Address 开始的null结尾的UNICODE_STRING结构。Address指定用来决定别名的等价值的虚拟内存位置。 
/f设置别名的等价值为File 文件的内容。

/f 开关只能和aS一起使用,不能和as一起。File指定内容作为别名等价值的文件。File可以包含空格,但是不能将 File用引号括起来。如果指定了非法的文件,会得到一个"Out of memory"的错误信息。

如果用户别名是和命令的其他部分是连续的,就必须使用${用户别名}将用户别名包围起来,或者使用空格把别名和其他部分分隔开来:

:> as ENTRY $exentry
:> al
Alias Value
------- -------
ENTRY $exentry
:> dd ENTRY L2
00e2af95 358f36e9 63e1e900
:> dd ENTRY+ L2
Couldn't resolve error at 'ENTRY+ '
:> dd ENTRY + L2
00e2af97 e900358f 002c63e1
:> dd ${ENTRY}+ L2
00e2af97 e900358f 002c63e1

但因为固定别名的长度是确定的,所以可以直接用$u0,而不需要大括号:

:> r $.u0=$exentry
:> dd $u0+
00e2af97 e900358f 002c63e1

使用al可以列出所有用户命令别名,使用ad可删除指定或全部(ad*)用户别名:

:> al
Alias Value
------- -------
ENTRY $exentry
windbg> .hh ad
:> ad ENTRY
:> al
No aliases