PDB ファイルから C++ のクラスヘッダを作成するソフト

2015年4月20日

Microsoft の PDB ファイル (Programming Database) からC/C++のヘッダファイルを出力するソフトを更新しました。

PDB に含まれる情報から C++のクラス情報と列挙型を作り出します。C++のクラス定義は IDA に似ていますがクラス内の関数定義を実定義から取得しているので引数名が追加されて可読性が上がっています。

  • version 1.0.0.1
    出力ファイルが尻切れになる不具合を修正。union に対応しました。

    class _DDSURFACEDESC2
    {
    /*+0x000*/unsigned long  dwSize;
    /*+0x004*/unsigned long  dwFlags;
    /*+0x008*/unsigned long  dwHeight;
    /*+0x00c*/unsigned long  dwWidth;
              union {
    /*+0x010*/  long           lPitch;
    /*+0x010*/  unsigned long  dwLinearSize;
              };
              union {
    /*+0x014*/  unsigned long  dwBackBufferCount;
    /*+0x014*/  unsigned long  dwDepth;
              };
              union {
    /*+0x018*/  unsigned long  dwMipMapCount;
    /*+0x018*/  unsigned long  dwRefreshRate;
    /*+0x018*/  unsigned long  dwSrcVBHandle;
              };
    /*+0x01c*/unsigned long  dwAlphaBitDepth;
    /*+0x020*/unsigned long  dwReserved;
    /*+0x024*/void*          lpSurface;
              union {
    /*+0x028*/  _DDCOLORKEY    ddckCKDestOverlay;
    /*+0x028*/  unsigned long  dwEmptyFaceColor;
              };
    /*+0x030*/_DDCOLORKEY    ddckCKDestBlt;
    /*+0x038*/_DDCOLORKEY    ddckCKSrcOverlay;
    /*+0x040*/_DDCOLORKEY    ddckCKSrcBlt;

SimpleROHook で活用するならば Injection.dllの PDB を読み込ませて、クラス内変数のオフセットを確認したり、 HirhPriest.pdb のクラス内のオフセットを確認したりするのに活用できます。

コマンドラインから使用するソフトです。以下に実行例を示します。

C:\>pdb2cheader
usage : pdb2cheader.exe pdbfile outputfile

C:\Gravity\HighPriest>pdb2cheader highpriest.pdb highpriest.h
*************************

インストーラーは付属していません。 Debug Interface Access SDK を使用しているため実行には Visual Studio のインストールが必要です。

ちゃんとしたものを自分で作りたいという方はMicrosoftのサイトのドキュメントを読んで頑張ってみましょう。

Debug Interface Access SDK
https://msdn.microsoft.com/ja-jp/library/x93ctkx8.aspx