Perl勉強

とりあえずWinDbg dtコマンド出力の基本形はこんな感じで処理すればいいのかな。型名は変換テーブル持たないとダメそうだけどね。

$dt = <<EOT
nt!_UNICODE_STRING
   +0x000 Length           : Uint2B
   +0x002 MaximumLength    : Uint2B
   +0x004 Buffer           : Ptr32 Uint2B
EOT
;

$dt =~ /(\w+)!_(\w+)\n/;
$module_name = $1;
$symbol_name = $2;

print "typedef struct /*" . $module_name . "!*/" . "_" . $symbol_name . "\n";
print "{" . "\n";
while ($' =~ /.*(\+0x\w\w\w) (\w+).*: (\w+)\n?/)
{
  printf("  %-20s%-20s// %s\n", $3, ($2 . ";"), $1);
}
print "} " . $symbol_name . ", *P" . $symbol_name . ";\n";

codepad使うと環境を整えなくてよいのが楽ですね。