WinDbg的alias与block
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
...
- 上一篇: 仅通过转储来排除内存泄漏
- 下一篇: 使用Java中的InputStream读取文件数据