WinDbg dt命令对于显示类型信息非常有用,我通常使用dt -a <memory-address> <type>输出元素数组的类型信息。
如何以编程方式操作dt输出的值?具体地说,对于数组中的每个元素,我希望输出数组中每个元素的位移值(数组中每个值的??(array-element)>>1)。我已经在一个包含100个元素的数组中尝试过这个方法(示例的数组内存地址为0xDEADBEEF,数据类型为MY_TYPE):
.for (r $t0=0; @$t0<0n100; r $t0=@$t0+1) { ??(dt 0xDEADBEEF)+(@@c++(sizeof(MY_TYPE))*@$t0) MY_TYPE)>>1 }实际上,对于数组中的每个元素,我都想打印dt的输出,数值移位1。
发布于 2016-04-12 03:09:14
尝试使用pykd。它为您提供了用于调试windbg angine的python API。您可以通过两种方式处理类型化变量:
dt输出= pykd.dbgCommand("dt _MYTYPE地址“)
callDtParser(dtoutput) #尽可能地解析文本: re ...
myvar = pykd.typedVar("_MYTYPE",地址)
print myvar.arrayField10 >> 2#与C的比较
如何安装pykd (带引导程序) https://pykd.codeplex.com/releases/view/614442
提示:不要使用python 2.7.11 -它有一个bug,在嵌入式应用程序中不起作用(你可以通过更改默认的python注册来修复它)
发布于 2016-04-12 06:11:32
您可以使用qwo,因为它从内存中读取:
.for (r $t0=0; @$t0<0n100; r $t0=@$t0+1) { r @$t1 = qwo(DEADBEEF+(@$t0*@@c++(sizeof(MY_TYPE))));?@$t1>>1 }因为qwo是一个读取内存的函数,所以可以通过编程操作该值。
发布于 2016-04-26 04:29:29
NatVis现在是这类问题的解决方案:
https://www.osr.com/blog/2015/11/06/fun-windbg-natvis-support/
基本上,您使用XML来描述您希望如何显示结构,然后使用dx而不是dt来显示它。
https://stackoverflow.com/questions/36555458
复制相似问题