WinDbg dt -a <memory-address> <type>
命令对于显示类型信息非常有用,我通常使用dt
输出元素数组的类型信息。
如何以编程方式操作??(array-element)>>1
输出的值?具体来说,对于数组中的每个元素,我想输出数组中每个元素的位移值(.for (r $t0=0; @$t0<0n100; r $t0=@$t0+1) { ??(dt 0xDEADBEEF)+(@@c++(sizeof(MY_TYPE))*@$t0) MY_TYPE)>>1 }
,用于数组中的每个值)。我试过这个包含100个元素的数组(示例数组内存地址为0xDEADBEEF,数据类型为MY_TYPE):
dt
基本上,对于数组中的每个元素,我想打印if ($savetodo=="true") {
$content=array("descr"=>$descr);
updateToDoInfo($id,$content);
}
的输出,数值偏移1。
答案 0 :(得分:3)
尝试使用pykd。它为您提供了pyb API,用于调试windbg的angine。您可以通过两种方式处理类型变量:
简单方法:解析。
dtoutput = pykd.dbgCommand(&#34; dt _MYTYPE地址&#34;)
callDtParser(dtoutput)#parse文本,你可以:re ....
正确的方法:pykd.typedVar
myvar = pykd.typedVar(&#34; _MYTYPE&#34;,地址)
print myvar.arrayField [10]&gt;&gt; 2#与C比较
如何安装pykd(使用bootstarpper) https://pykd.codeplex.com/releases/view/614442
提示:不要使用python 2.7.11 - 它有一个bug并且在嵌入应用程序时不起作用(你可以通过更改默认的python registartion来修复它)
答案 1 :(得分:2)
您可以使用qwo
,因为它从内存中读取:
.for (r $t0=0; @$t0<0n100; r $t0=@$t0+1) { r @$t1 = qwo(DEADBEEF+(@$t0*@@c++(sizeof(MY_TYPE))));?@$t1>>1 }
由于qwo
是一个内存读取函数,因此可以通过编程方式操作该值。
答案 2 :(得分:0)
NatVis现在是解决此类问题的方法:
https://www.osr.com/blog/2015/11/06/fun-windbg-natvis-support/
基本上,您使用XML来描述您希望结构显示的方式,然后使用dx而不是dt显示它。