Arrays WinDbg:如何以编程方式解析来自“dt”的输出?
WinDbgArrays WinDbg:如何以编程方式解析来自“dt”的输出?,arrays,windbg,Arrays,Windbg,WinDbgdt命令对于显示类型信息非常有用,我通常使用dt-a为元素数组输出类型信息 如何以编程方式操作dt输出的值?具体地说,对于数组中的每个元素,我想输出数组中每个元素的位移位值(??(数组元素)>>1,表示数组中的每个值)。我已经在100个元素的数组中尝试过这个方法(示例数组内存地址为0xDEADBEEF,数据类型为MY_TYPE): .for(r$t0=0;@$t0>1} 基本上,对于数组中的每个元素,我想打印dt的输出,数值移位1。尝试使用pykd。它为您提供了调试windbg a
dt
命令对于显示类型信息非常有用,我通常使用dt-a
为元素数组输出类型信息
如何以编程方式操作dt
输出的值?具体地说,对于数组中的每个元素,我想输出数组中每个元素的位移位值(??(数组元素)>>1,表示数组中的每个值)。我已经在100个元素的数组中尝试过这个方法(示例数组内存地址为0xDEADBEEF,数据类型为MY_TYPE):
.for(r$t0=0;@$t0>1}
基本上,对于数组中的每个元素,我想打印dt
的输出,数值移位1。尝试使用pykd。它为您提供了调试windbg angine的python API。您可以通过两种方式使用类型化变量:
简单的方法:解析
dtoutput=pykd.dbgCommand(“dt_MYTYPE地址”)
callDtParser(dtoutput)#尽可能解析文本:re
正确的方式:pykd.typedVar
myvar=pykd.typedVar(“\u MYTYPE”,地址)
打印myvar.arrayField[10]>>2#与C比较
如何安装pykd(使用bootstarpper)
提示:不要使用python 2.7.11-它有一个bug,在嵌入应用程序时不起作用(您可以通过更改默认python注册表来修复它)您可以使用qwo
,因为它从内存中读取:
.for (r $t0=0; @$t0<0n100; r $t0=@$t0+1) { r @$t1 = qwo(DEADBEEF+(@$t0*@@c++(sizeof(MY_TYPE))));?@$t1>>1 }
.for(r$t0=0;@$t0>1}
由于qwo
是一个内存读取函数,因此可以通过编程方式对该值进行操作。NatVis现在是此类问题的解决方案:
基本上,您可以使用XML来描述如何显示结构,然后使用dx而不是dt来显示它。谢谢。我认为这会起作用。我还找到了另一个解决方案,我将其作为参考发布。windbg脚本很酷,但需要很多时间,我花了很多时间:)
.for (r $t0=0; @$t0<0n100; r $t0=@$t0+1) { r @$t1 = qwo(DEADBEEF+(@$t0*@@c++(sizeof(MY_TYPE))));?@$t1>>1 }