2016-04-11 11 views
1

WinDbg dtコマンドは、型情報を表示するのに非常に便利です。私は通常、要素の配列の型情報を出力するのに、dt -a <memory-address> <type>を使用します。WinDbg:プログラムから `dt`の出力を解析するにはどうすればよいですか?

dtの出力値をプログラムでどのように操作するのですか?具体的には、配列の各要素について、配列の各要素のビットシフトされた値を出力したいと考えています(配列の各値に対して??(array-element)>>1)。私は(データ型MY_TYPEと、0xdeadbeefが例アレイのメモリアドレスに)100個の素子のアレイのためにこれを試みた:

.for (r $t0=0; @$t0<0n100; r [email protected]$t0+1) { ??(dt 0xDEADBEEF)+(@@c++(sizeof(MY_TYPE))*@$t0) MY_TYPE)>>1 } 

本質的に、配列内の各要素のために、私は出力を印刷したいですdtの数値を1だけシフトしたものです。

答えて

3

pykdを使用してください。これは、windbgのデバッグangineのためのPython APIを提供します。型付き変数で2通りの方法で作業できます。

  1. 単純な方法:解析。

    dtoutput = pykd.dbgCommand( "DTの_MYTYPEアドレス")

    callDtParser(dtoutput)#構文解析テキストことができますように....再

  2. 正しい方法:pykd.typedVar

    MYVAR = pykd.typedVar( "_ MYTYPE"、アドレス)

    印刷myvar.arrayField [10] >> 2つの#はCと比較

(bootstarpper付き)pykdをインストールする方法

https://pykd.codeplex.com/releases/view/614442

ヒント:pythonの2.7.11を使用していない - それはバグがあり、アプリケーションを埋め込むには動作しません(デフォルトのPythonのregistartionを変更して、それを修正することができます)

+0

ありがとうございます。私はこれがうまくいくと思います。私はまた別の解決策を見つけました。 – Kirby

+0

windbgスクリプトはクールだが、時間がかかる、私はそれに多くの時間を費やした:) – ussrhero

2

、メモリからの読み出しのようにして、qwoを使用することができます。

.for (r $t0=0; @$t0<0n100; r [email protected]$t0+1) { r @$t1 = qwo(DEADBEEF+(@$t0*@@c++(sizeof(MY_TYPE))));[email protected]$t1>>1 } 

qwoはメモリ読取機能であるため、値がプログラムで操作することができます。

関連する問題