关于DML的一些使用
DML是一种非常简单的标记语言,它帮助基于现有命令的输出发现和执行新命令。许多WinDbg命令(以及扩展命令)都支持DML。例如,下面是lm D命令,它显示DML输出:
在上面的命令输出中,当我单击“SillyThreadPool”链接时,调试器为我执行了另一个命令lmDvmSillyThreadPool,它显示模块信息。同样,还有一个链接缺陷可以帮助我探索该模块中的符号和函数。
第一件事。您不必记住一堆奇怪的命令后缀就可以得到DML输出。有一个全局开关可以打开,.prefer_dml 1,这会导致许多内置命令和扩展命令显示dml输出。例如,下面是打开该开关后kn命令的输出:
单击时,此处的链接将切换到该帧并显示源代码和本地变量(执行的命令是.frame 0nN;dv/t/v)。
调试器脚本和扩展也可以生成DML输出。在调试器脚本中,只需使用.printf/D命令,并在其中嵌入DML链接。在调试器扩展中,可以使用IDebugClient::ControlledOutput函数输出DML。例如,下面显示单击时执行另一个命令的链接:
.printf /D "<exec cmd=\"lm m ntdll\">lm ntdll</exec>\n\n"
我敢打赌你不知道。应用程序本身可以向调试器输出DML命令!只需要使用outputDebugStringAPI,并在其中嵌入神奇的字符串<?dml?>. 该魔法令牌之后的所有内容都将被解释为DML字符串,并相应地显示在调试器中。例如,假设我们的应用程序中有以下代码:
OutputDebugString(L"Entered thread pool demo app.\n<?dml?><exec cmd=\"!uniqstack\">Dump unique stacks</exec>\n");
然后,调试器遇到此调试输出时将显示命令链接:
下一个命令是.dml_flow。此命令旨在通过将反汇编函数拆分为代码块并帮助使用DML链接在块之间导航,使其更易于读取。你自己试验这个命令比我用语言解释要容易得多,但总的来说,你提供了两个地址——一个开始地址和一个目标地址——这个命令帮助你理解从开始地址可以到达目标的代码路径。
与DML有关的最后一个命令是discovery命令,.DML_start。此命令接受一个包含许多DML链接和命令描述的文件,并将其显示在调试器窗口中(这与命令浏览器窗口结合使用非常方便)。例如,假设您有以下文件:
Load SOS according to the CLR version that is currently in the process.
<link cmd=".loadby sos clr; .loadby sos mscorwks">Load SOS</link>
Display the last event and CLR exception.
<link cmd=".lastevent">Last debugger event</link>
<link cmd="!PrintException">Last CLR exception</link>
Display the CLR call stack for a specific thread.
<b>~<i>N</i>s; !CLRStack</b>
Example: <link cmd="~0s; !CLRStack">~0s; !CLRStack</link>
执行.browse.dml_start dn.dml会产生以下结果:
这是一个方便的命令浏览器,您可以使用它开始调查。我还认为它对于解释您在dump分析会话中所采取的步骤非常有用
关于DML的一些使用的更多相关文章
- 数据库 DML、DDL、DCL区别 .
总体解释: DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的 ...
- Oracle数据库操作分类DDL、DML、DCL、TCL类别清单异同
DDL Data Definition Language (DDL) statements are used to define the database structure or schema. S ...
- DDL/DML是什么?
DDL:(Data Definition Language)数据库定义语言 它是定义数据库的语言, 里面包含: CREATE ALTER DROP TRUNCATE COMMENT RENAME DM ...
- jdbc java数据库连接 3)Statement接口之执行DDL和DML语句的简化
上一章的代码中,可以发现,jdbc执行DDL和DML有几个步骤都是一样的: 1)执行语句开始时,创建驱动注册对象.获取连接的数据库对象.创建Statement对象 // 创建驱动注册对象 Class. ...
- jdbc java数据库连接 3)Statement接口之执行DDL、DML、DQL
|- Statement接口: 用于执行静态的sql语句 |- int executeUpdate(String sql) : 执行静态的更新sql语句(DDL,DML) |- ResultSet ...
- RDBMS DML DDL
RDBMS RDBMS 指的是关系型数据库管理系统. RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server, IBM DB2, Oracle, MySQL ...
- Oracle(DML)
数据操作语言: insert update delete 事务控制语言: commit rollback savepoint 1.insert语句 两种格式: 直接插入 子查询插入 1. 直接插入基本 ...
- MySQL DML 整理
DML(Data Manipulation Language)数据操纵语言statements are used for managing data within schema objects. 由D ...
- Vertica并发DML操作性能瓶颈的产生与优化(转)
文章来源:中国联通网研院网优网管部IT技术研究团队 作者:陆昕 1. 引言 众所周知,MPP数据库以其分布式的超大存储能力以及列式的高速汇总能力,已经成为大数据分析比不可少的工具.Vertica就是这 ...
- DQL、DML、DDL、DCL的概念与区别
SQL(Structure Query Language)语言是数据库的核心语言. SQL的发展是从1974年开始的,其发展过程如下:1974年-----由Boyce和Chamberlin提出,当时称 ...
随机推荐
- 微信企业号JS SDK
微信企业号JS SDK <?php define('CorpID', "wx82e2c31215d9a5a7"); define('CorpSecret', "&q ...
- vuejs怎么和thinkphp结合
vue在服务端部署时,我们都知道通过npm run build 指令打包好的dist文件,通过http指定是可以直接浏览的,Thinkphp通过域名指向index.php文件才可以浏览.要使前端正常调 ...
- 发送邮件报错javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed
关于使用javaMail发送邮件报错:javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multip ...
- WPF XAML的读法
XAML 一直以为读作X-A-M-L 不过 一直都是念错了 正确念法:ZAMMEL 类似:ZeIMO [平音]
- 开源分布式追踪系统 — Jaeger介绍
目录 一.Jaeger是什么 二.Jaeger架构 1. 术语 2. 架构图 三.关于采样率 四.部署与实践 一.Jaeger是什么 Uber开发的一个受Dapper和Zipkin启发的分布式跟踪系统 ...
- 微信小程序报thirdScriptError Cannot read property 'setData' of undefined
用onLoad: function (options) {} 加载页面缓存的数据的时候报错 修改为
- Asp.net MVC企业级开发(04)---SignalR消息推送
Asp.net SignalR是微软为实现实时通信而开发的一个类库.可以适用于以下场景: 聊天室,如在线客服系统,IM系统等 股票价格实时更新 消息的推送服务 游戏中人物位置的实时推送 SignalR ...
- office2016下载安装
https://jingyan.baidu.com/article/359911f5acfa4357fe030631.html
- Haskell路线
@ 知乎 @ <I wish i have learned haskell> ———— 包括: Ranks, forall, Monad/CPS, monadic parser, FFI ...
- C++中Matrix(矩阵)的基本运算( +、-、=、<<)
利用二维指针开辟空间形成二维数组: 原题为设计一个Matrix类,实现基本的矩阵运算: 初次设计为HL[10][10]数组,存放矩阵元素,后改为二维指针: 主要问题存在于二维指针理解的不透彻,无法理解 ...