首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinDbg:如何以编程方式解析`dt`的输出?

WinDbg:如何以编程方式解析`dt`的输出?
EN

Stack Overflow用户
提问于 2016-04-12 01:35:49
回答 3查看 762关注 0票数 2

WinDbg dt命令对于显示类型信息非常有用,我通常使用dt -a <memory-address> <type>输出元素数组的类型信息。

如何以编程方式操作dt输出的值?具体地说,对于数组中的每个元素,我希望输出数组中每个元素的位移值(数组中每个值的??(array-element)>>1)。我已经在一个包含100个元素的数组中尝试过这个方法(示例的数组内存地址为0xDEADBEEF,数据类型为MY_TYPE):

代码语言:javascript
复制
.for (r $t0=0; @$t0<0n100; r $t0=@$t0+1) { ??(dt 0xDEADBEEF)+(@@c++(sizeof(MY_TYPE))*@$t0) MY_TYPE)>>1 }

实际上,对于数组中的每个元素,我都想打印dt的输出,数值移位1。

EN

回答 3

Stack Overflow用户

发布于 2016-04-12 03:09:14

尝试使用pykd。它为您提供了用于调试windbg angine的python API。您可以通过两种方式处理类型化变量:

  1. 的简单方法:解析。

dt输出= pykd.dbgCommand("dt _MYTYPE地址“)

callDtParser(dtoutput) #尽可能地解析文本: re ...

  • Right way: pykd.typedVar

myvar = pykd.typedVar("_MYTYPE",地址)

print myvar.arrayField10 >> 2#与C的比较

如何安装pykd (带引导程序) https://pykd.codeplex.com/releases/view/614442

提示:不要使用python 2.7.11 -它有一个bug,在嵌入式应用程序中不起作用(你可以通过更改默认的python注册来修复它)

票数 3
EN

Stack Overflow用户

发布于 2016-04-12 06:11:32

您可以使用qwo,因为它从内存中读取:

代码语言:javascript
复制
.for (r $t0=0; @$t0<0n100; r $t0=@$t0+1) { r @$t1 = qwo(DEADBEEF+(@$t0*@@c++(sizeof(MY_TYPE))));?@$t1>>1 }

因为qwo是一个读取内存的函数,所以可以通过编程操作该值。

票数 3
EN

Stack Overflow用户

发布于 2016-04-26 04:29:29

NatVis现在是这类问题的解决方案:

https://www.osr.com/blog/2015/11/06/fun-windbg-natvis-support/

基本上,您使用XML来描述您希望如何显示结构,然后使用dx而不是dt来显示它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36555458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档