WinDbg的alias命令(as, aS)在script里面很有用,但是WinDbg的script不算是一种设计良好的语言,一般在写WinDbg script总会遇到各种坑,就包括alias命令的求值。

与变量相比,WinDbg的alias更像是C语言的宏。他可以把一个名字定义成指定的字符串,环境变量,给定地址的字符串,甚至表达式的值或者WinDbg命令的输出字符串。C语言的宏仅在定义点到文件结束有效(如果后面没有undef),WinDbg的alias的求值则 下面解释下这个过程。

假设已经有alias (aS foo bar), 在运行命令 .echo foo 或者 .echo ${foo} (使用后者的可以对alias name提供显示的tokenize和参数,比如${/v:foo},参考WinDbg帮助)。在运行 .echo foo 命令,WinDbg会对整个命令字符串执行alias替换,替换完成在执行整个命令,运行栈如下:


dbgeng!ReplaceAliases
dbgeng
!PreprocessExternalStrBuf
dbgeng
!PreprocessExternalString
dbgeng
!Execute
dbgeng
!DebugClient::ExecuteWide
...

标签: none

添加新评论