Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays WinDbg:如何以编程方式解析来自“dt”的输出?_Arrays_Windbg - Fatal编程技术网

Arrays WinDbg:如何以编程方式解析来自“dt”的输出?

Arrays 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

WinDbg
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 }