ホーム › System.Diagnostics.Debug.Extensions › KDDEBUGGER_DATA32
KDDEBUGGER_DATA32
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Header | DBGKD_DEBUG_DATA_HEADER32 | 16 | +0 | +0 | デバッガデータブロックの共通ヘッダ(32ビット)。 |
| KernBase | DWORD | 4 | +16 | +16 | カーネルイメージの基底アドレス。 |
| BreakpointWithStatus | DWORD | 4 | +20 | +20 | ステータス付きブレークポイント命令のアドレス。 |
| SavedContext | DWORD | 4 | +24 | +24 | 保存済みコンテキストのアドレス。 |
| ThCallbackStack | WORD | 2 | +28 | +28 | スレッドのコールバックスタックのオフセット。 |
| NextCallback | WORD | 2 | +30 | +30 | 次のコールバックフレームのオフセット。 |
| FramePointer | WORD | 2 | +32 | +32 | コールバックフレームポインタのオフセット。 |
| _bitfield | WORD | 2 | +34 | +34 | 各種フラグをまとめたビットフィールド。 |
| KiCallUserMode | DWORD | 4 | +36 | +36 | KiCallUserMode関数のアドレス。 |
| KeUserCallbackDispatcher | DWORD | 4 | +40 | +40 | ユーザーコールバックディスパッチャのアドレス。 |
| PsLoadedModuleList | DWORD | 4 | +44 | +44 | 読み込み済みモジュールリストのアドレス。 |
| PsActiveProcessHead | DWORD | 4 | +48 | +48 | アクティブプロセスリストの先頭アドレス。 |
| PspCidTable | DWORD | 4 | +52 | +52 | クライアントID(PID/TID)テーブルのアドレス。 |
| ExpSystemResourcesList | DWORD | 4 | +56 | +56 | システムリソースリストのアドレス。 |
| ExpPagedPoolDescriptor | DWORD | 4 | +60 | +60 | ページプール記述子のアドレス。 |
| ExpNumberOfPagedPools | DWORD | 4 | +64 | +64 | ページプールの数を保持する変数のアドレス。 |
| KeTimeIncrement | DWORD | 4 | +68 | +68 | タイマ刻み(時間増分)を保持する変数のアドレス。 |
| KeBugCheckCallbackListHead | DWORD | 4 | +72 | +72 | バグチェックコールバックリストの先頭アドレス。 |
| KiBugcheckData | DWORD | 4 | +76 | +76 | バグチェックデータ配列のアドレス。 |
| IopErrorLogListHead | DWORD | 4 | +80 | +80 | I/Oエラーログリストの先頭アドレス。 |
| ObpRootDirectoryObject | DWORD | 4 | +84 | +84 | オブジェクトマネージャのルートディレクトリのアドレス。 |
| ObpTypeObjectType | DWORD | 4 | +88 | +88 | 型オブジェクトのタイプを示すアドレス。 |
| MmSystemCacheStart | DWORD | 4 | +92 | +92 | システムキャッシュの開始アドレス。 |
| MmSystemCacheEnd | DWORD | 4 | +96 | +96 | システムキャッシュの終了アドレス。 |
| MmSystemCacheWs | DWORD | 4 | +100 | +100 | システムキャッシュのワーキングセット情報のアドレス。 |
| MmPfnDatabase | DWORD | 4 | +104 | +104 | ページフレーム番号(PFN)データベースのアドレス。 |
| MmSystemPtesStart | DWORD | 4 | +108 | +108 | システムPTE領域の開始アドレス。 |
| MmSystemPtesEnd | DWORD | 4 | +112 | +112 | システムPTE領域の終了アドレス。 |
| MmSubsectionBase | DWORD | 4 | +116 | +116 | サブセクションの基底アドレス。 |
| MmNumberOfPagingFiles | DWORD | 4 | +120 | +120 | ページングファイル数を保持する変数のアドレス。 |
| MmLowestPhysicalPage | DWORD | 4 | +124 | +124 | 最小物理ページ番号を保持する変数のアドレス。 |
| MmHighestPhysicalPage | DWORD | 4 | +128 | +128 | 最大物理ページ番号を保持する変数のアドレス。 |
| MmNumberOfPhysicalPages | DWORD | 4 | +132 | +132 | 物理ページ総数を保持する変数のアドレス。 |
| MmMaximumNonPagedPoolInBytes | DWORD | 4 | +136 | +136 | 非ページプールの最大バイト数を保持する変数のアドレス。 |
| MmNonPagedSystemStart | DWORD | 4 | +140 | +140 | 非ページシステム領域の開始アドレス。 |
| MmNonPagedPoolStart | DWORD | 4 | +144 | +144 | 非ページプールの開始アドレス。 |
| MmNonPagedPoolEnd | DWORD | 4 | +148 | +148 | 非ページプールの終了アドレス。 |
| MmPagedPoolStart | DWORD | 4 | +152 | +152 | ページプールの開始アドレス。 |
| MmPagedPoolEnd | DWORD | 4 | +156 | +156 | ページプールの終了アドレス。 |
| MmPagedPoolInformation | DWORD | 4 | +160 | +160 | ページプール情報のアドレス。 |
| MmPageSize | DWORD | 4 | +164 | +164 | メモリページのサイズ(バイト)。 |
| MmSizeOfPagedPoolInBytes | DWORD | 4 | +168 | +168 | ページプールのサイズ(バイト)を保持する変数のアドレス。 |
| MmTotalCommitLimit | DWORD | 4 | +172 | +172 | コミット上限を保持する変数のアドレス。 |
| MmTotalCommittedPages | DWORD | 4 | +176 | +176 | コミット済みページ数を保持する変数のアドレス。 |
| MmSharedCommit | DWORD | 4 | +180 | +180 | 共有コミット量を保持する変数のアドレス。 |
| MmDriverCommit | DWORD | 4 | +184 | +184 | ドライバのコミット量を保持する変数のアドレス。 |
| MmProcessCommit | DWORD | 4 | +188 | +188 | プロセスのコミット量を保持する変数のアドレス。 |
| MmPagedPoolCommit | DWORD | 4 | +192 | +192 | ページプールのコミット量を保持する変数のアドレス。 |
| MmExtendedCommit | DWORD | 4 | +196 | +196 | 拡張コミット量を保持する変数のアドレス。 |
| MmZeroedPageListHead | DWORD | 4 | +200 | +200 | ゼロ化済みページリストの先頭アドレス。 |
| MmFreePageListHead | DWORD | 4 | +204 | +204 | 空きページリストの先頭アドレス。 |
| MmStandbyPageListHead | DWORD | 4 | +208 | +208 | スタンバイページリストの先頭アドレス。 |
| MmModifiedPageListHead | DWORD | 4 | +212 | +212 | 変更済みページリストの先頭アドレス。 |
| MmModifiedNoWritePageListHead | DWORD | 4 | +216 | +216 | 書き戻し不要の変更済みページリストの先頭アドレス。 |
| MmAvailablePages | DWORD | 4 | +220 | +220 | 利用可能ページ数を保持する変数のアドレス。 |
| MmResidentAvailablePages | DWORD | 4 | +224 | +224 | 常駐可能ページ数を保持する変数のアドレス。 |
| PoolTrackTable | DWORD | 4 | +228 | +228 | プール追跡テーブルのアドレス。 |
| NonPagedPoolDescriptor | DWORD | 4 | +232 | +232 | 非ページプール記述子のアドレス。 |
| MmHighestUserAddress | DWORD | 4 | +236 | +236 | ユーザー空間の最高アドレスを保持する変数のアドレス。 |
| MmSystemRangeStart | DWORD | 4 | +240 | +240 | システム空間の開始アドレスを保持する変数のアドレス。 |
| MmUserProbeAddress | DWORD | 4 | +244 | +244 | ユーザーポインタ検証上限アドレスを保持する変数のアドレス。 |
| KdPrintCircularBuffer | DWORD | 4 | +248 | +248 | デバッグ出力用循環バッファの開始アドレス。 |
| KdPrintCircularBufferEnd | DWORD | 4 | +252 | +252 | デバッグ出力用循環バッファの終了アドレス。 |
| KdPrintWritePointer | DWORD | 4 | +256 | +256 | 循環バッファの書き込み位置を保持するアドレス。 |
| KdPrintRolloverCount | DWORD | 4 | +260 | +260 | 循環バッファのロールオーバー回数を保持するアドレス。 |
| MmLoadedUserImageList | DWORD | 4 | +264 | +264 | 読み込み済みユーザーイメージリストのアドレス。 |
各言語での定義
#include <windows.h>
// LIST_ENTRY32 (x64 8 / x86 8 バイト)
typedef struct LIST_ENTRY32 {
DWORD Flink;
DWORD Blink;
} LIST_ENTRY32;
// DBGKD_DEBUG_DATA_HEADER32 (x64 16 / x86 16 バイト)
typedef struct DBGKD_DEBUG_DATA_HEADER32 {
LIST_ENTRY32 List;
DWORD OwnerTag;
DWORD Size;
} DBGKD_DEBUG_DATA_HEADER32;
// KDDEBUGGER_DATA32 (x64 268 / x86 268 バイト)
typedef struct KDDEBUGGER_DATA32 {
DBGKD_DEBUG_DATA_HEADER32 Header;
DWORD KernBase;
DWORD BreakpointWithStatus;
DWORD SavedContext;
WORD ThCallbackStack;
WORD NextCallback;
WORD FramePointer;
WORD _bitfield;
DWORD KiCallUserMode;
DWORD KeUserCallbackDispatcher;
DWORD PsLoadedModuleList;
DWORD PsActiveProcessHead;
DWORD PspCidTable;
DWORD ExpSystemResourcesList;
DWORD ExpPagedPoolDescriptor;
DWORD ExpNumberOfPagedPools;
DWORD KeTimeIncrement;
DWORD KeBugCheckCallbackListHead;
DWORD KiBugcheckData;
DWORD IopErrorLogListHead;
DWORD ObpRootDirectoryObject;
DWORD ObpTypeObjectType;
DWORD MmSystemCacheStart;
DWORD MmSystemCacheEnd;
DWORD MmSystemCacheWs;
DWORD MmPfnDatabase;
DWORD MmSystemPtesStart;
DWORD MmSystemPtesEnd;
DWORD MmSubsectionBase;
DWORD MmNumberOfPagingFiles;
DWORD MmLowestPhysicalPage;
DWORD MmHighestPhysicalPage;
DWORD MmNumberOfPhysicalPages;
DWORD MmMaximumNonPagedPoolInBytes;
DWORD MmNonPagedSystemStart;
DWORD MmNonPagedPoolStart;
DWORD MmNonPagedPoolEnd;
DWORD MmPagedPoolStart;
DWORD MmPagedPoolEnd;
DWORD MmPagedPoolInformation;
DWORD MmPageSize;
DWORD MmSizeOfPagedPoolInBytes;
DWORD MmTotalCommitLimit;
DWORD MmTotalCommittedPages;
DWORD MmSharedCommit;
DWORD MmDriverCommit;
DWORD MmProcessCommit;
DWORD MmPagedPoolCommit;
DWORD MmExtendedCommit;
DWORD MmZeroedPageListHead;
DWORD MmFreePageListHead;
DWORD MmStandbyPageListHead;
DWORD MmModifiedPageListHead;
DWORD MmModifiedNoWritePageListHead;
DWORD MmAvailablePages;
DWORD MmResidentAvailablePages;
DWORD PoolTrackTable;
DWORD NonPagedPoolDescriptor;
DWORD MmHighestUserAddress;
DWORD MmSystemRangeStart;
DWORD MmUserProbeAddress;
DWORD KdPrintCircularBuffer;
DWORD KdPrintCircularBufferEnd;
DWORD KdPrintWritePointer;
DWORD KdPrintRolloverCount;
DWORD MmLoadedUserImageList;
} KDDEBUGGER_DATA32;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct LIST_ENTRY32
{
public uint Flink;
public uint Blink;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DBGKD_DEBUG_DATA_HEADER32
{
public LIST_ENTRY32 List;
public uint OwnerTag;
public uint Size;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KDDEBUGGER_DATA32
{
public DBGKD_DEBUG_DATA_HEADER32 Header;
public uint KernBase;
public uint BreakpointWithStatus;
public uint SavedContext;
public ushort ThCallbackStack;
public ushort NextCallback;
public ushort FramePointer;
public ushort _bitfield;
public uint KiCallUserMode;
public uint KeUserCallbackDispatcher;
public uint PsLoadedModuleList;
public uint PsActiveProcessHead;
public uint PspCidTable;
public uint ExpSystemResourcesList;
public uint ExpPagedPoolDescriptor;
public uint ExpNumberOfPagedPools;
public uint KeTimeIncrement;
public uint KeBugCheckCallbackListHead;
public uint KiBugcheckData;
public uint IopErrorLogListHead;
public uint ObpRootDirectoryObject;
public uint ObpTypeObjectType;
public uint MmSystemCacheStart;
public uint MmSystemCacheEnd;
public uint MmSystemCacheWs;
public uint MmPfnDatabase;
public uint MmSystemPtesStart;
public uint MmSystemPtesEnd;
public uint MmSubsectionBase;
public uint MmNumberOfPagingFiles;
public uint MmLowestPhysicalPage;
public uint MmHighestPhysicalPage;
public uint MmNumberOfPhysicalPages;
public uint MmMaximumNonPagedPoolInBytes;
public uint MmNonPagedSystemStart;
public uint MmNonPagedPoolStart;
public uint MmNonPagedPoolEnd;
public uint MmPagedPoolStart;
public uint MmPagedPoolEnd;
public uint MmPagedPoolInformation;
public uint MmPageSize;
public uint MmSizeOfPagedPoolInBytes;
public uint MmTotalCommitLimit;
public uint MmTotalCommittedPages;
public uint MmSharedCommit;
public uint MmDriverCommit;
public uint MmProcessCommit;
public uint MmPagedPoolCommit;
public uint MmExtendedCommit;
public uint MmZeroedPageListHead;
public uint MmFreePageListHead;
public uint MmStandbyPageListHead;
public uint MmModifiedPageListHead;
public uint MmModifiedNoWritePageListHead;
public uint MmAvailablePages;
public uint MmResidentAvailablePages;
public uint PoolTrackTable;
public uint NonPagedPoolDescriptor;
public uint MmHighestUserAddress;
public uint MmSystemRangeStart;
public uint MmUserProbeAddress;
public uint KdPrintCircularBuffer;
public uint KdPrintCircularBufferEnd;
public uint KdPrintWritePointer;
public uint KdPrintRolloverCount;
public uint MmLoadedUserImageList;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure LIST_ENTRY32
Public Flink As UInteger
Public Blink As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DBGKD_DEBUG_DATA_HEADER32
Public List As LIST_ENTRY32
Public OwnerTag As UInteger
Public Size As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KDDEBUGGER_DATA32
Public Header As DBGKD_DEBUG_DATA_HEADER32
Public KernBase As UInteger
Public BreakpointWithStatus As UInteger
Public SavedContext As UInteger
Public ThCallbackStack As UShort
Public NextCallback As UShort
Public FramePointer As UShort
Public _bitfield As UShort
Public KiCallUserMode As UInteger
Public KeUserCallbackDispatcher As UInteger
Public PsLoadedModuleList As UInteger
Public PsActiveProcessHead As UInteger
Public PspCidTable As UInteger
Public ExpSystemResourcesList As UInteger
Public ExpPagedPoolDescriptor As UInteger
Public ExpNumberOfPagedPools As UInteger
Public KeTimeIncrement As UInteger
Public KeBugCheckCallbackListHead As UInteger
Public KiBugcheckData As UInteger
Public IopErrorLogListHead As UInteger
Public ObpRootDirectoryObject As UInteger
Public ObpTypeObjectType As UInteger
Public MmSystemCacheStart As UInteger
Public MmSystemCacheEnd As UInteger
Public MmSystemCacheWs As UInteger
Public MmPfnDatabase As UInteger
Public MmSystemPtesStart As UInteger
Public MmSystemPtesEnd As UInteger
Public MmSubsectionBase As UInteger
Public MmNumberOfPagingFiles As UInteger
Public MmLowestPhysicalPage As UInteger
Public MmHighestPhysicalPage As UInteger
Public MmNumberOfPhysicalPages As UInteger
Public MmMaximumNonPagedPoolInBytes As UInteger
Public MmNonPagedSystemStart As UInteger
Public MmNonPagedPoolStart As UInteger
Public MmNonPagedPoolEnd As UInteger
Public MmPagedPoolStart As UInteger
Public MmPagedPoolEnd As UInteger
Public MmPagedPoolInformation As UInteger
Public MmPageSize As UInteger
Public MmSizeOfPagedPoolInBytes As UInteger
Public MmTotalCommitLimit As UInteger
Public MmTotalCommittedPages As UInteger
Public MmSharedCommit As UInteger
Public MmDriverCommit As UInteger
Public MmProcessCommit As UInteger
Public MmPagedPoolCommit As UInteger
Public MmExtendedCommit As UInteger
Public MmZeroedPageListHead As UInteger
Public MmFreePageListHead As UInteger
Public MmStandbyPageListHead As UInteger
Public MmModifiedPageListHead As UInteger
Public MmModifiedNoWritePageListHead As UInteger
Public MmAvailablePages As UInteger
Public MmResidentAvailablePages As UInteger
Public PoolTrackTable As UInteger
Public NonPagedPoolDescriptor As UInteger
Public MmHighestUserAddress As UInteger
Public MmSystemRangeStart As UInteger
Public MmUserProbeAddress As UInteger
Public KdPrintCircularBuffer As UInteger
Public KdPrintCircularBufferEnd As UInteger
Public KdPrintWritePointer As UInteger
Public KdPrintRolloverCount As UInteger
Public MmLoadedUserImageList As UInteger
End Structureimport ctypes
from ctypes import wintypes
class LIST_ENTRY32(ctypes.Structure):
_fields_ = [
("Flink", wintypes.DWORD),
("Blink", wintypes.DWORD),
]
class DBGKD_DEBUG_DATA_HEADER32(ctypes.Structure):
_fields_ = [
("List", LIST_ENTRY32),
("OwnerTag", wintypes.DWORD),
("Size", wintypes.DWORD),
]
class KDDEBUGGER_DATA32(ctypes.Structure):
_fields_ = [
("Header", DBGKD_DEBUG_DATA_HEADER32),
("KernBase", wintypes.DWORD),
("BreakpointWithStatus", wintypes.DWORD),
("SavedContext", wintypes.DWORD),
("ThCallbackStack", ctypes.c_ushort),
("NextCallback", ctypes.c_ushort),
("FramePointer", ctypes.c_ushort),
("_bitfield", ctypes.c_ushort),
("KiCallUserMode", wintypes.DWORD),
("KeUserCallbackDispatcher", wintypes.DWORD),
("PsLoadedModuleList", wintypes.DWORD),
("PsActiveProcessHead", wintypes.DWORD),
("PspCidTable", wintypes.DWORD),
("ExpSystemResourcesList", wintypes.DWORD),
("ExpPagedPoolDescriptor", wintypes.DWORD),
("ExpNumberOfPagedPools", wintypes.DWORD),
("KeTimeIncrement", wintypes.DWORD),
("KeBugCheckCallbackListHead", wintypes.DWORD),
("KiBugcheckData", wintypes.DWORD),
("IopErrorLogListHead", wintypes.DWORD),
("ObpRootDirectoryObject", wintypes.DWORD),
("ObpTypeObjectType", wintypes.DWORD),
("MmSystemCacheStart", wintypes.DWORD),
("MmSystemCacheEnd", wintypes.DWORD),
("MmSystemCacheWs", wintypes.DWORD),
("MmPfnDatabase", wintypes.DWORD),
("MmSystemPtesStart", wintypes.DWORD),
("MmSystemPtesEnd", wintypes.DWORD),
("MmSubsectionBase", wintypes.DWORD),
("MmNumberOfPagingFiles", wintypes.DWORD),
("MmLowestPhysicalPage", wintypes.DWORD),
("MmHighestPhysicalPage", wintypes.DWORD),
("MmNumberOfPhysicalPages", wintypes.DWORD),
("MmMaximumNonPagedPoolInBytes", wintypes.DWORD),
("MmNonPagedSystemStart", wintypes.DWORD),
("MmNonPagedPoolStart", wintypes.DWORD),
("MmNonPagedPoolEnd", wintypes.DWORD),
("MmPagedPoolStart", wintypes.DWORD),
("MmPagedPoolEnd", wintypes.DWORD),
("MmPagedPoolInformation", wintypes.DWORD),
("MmPageSize", wintypes.DWORD),
("MmSizeOfPagedPoolInBytes", wintypes.DWORD),
("MmTotalCommitLimit", wintypes.DWORD),
("MmTotalCommittedPages", wintypes.DWORD),
("MmSharedCommit", wintypes.DWORD),
("MmDriverCommit", wintypes.DWORD),
("MmProcessCommit", wintypes.DWORD),
("MmPagedPoolCommit", wintypes.DWORD),
("MmExtendedCommit", wintypes.DWORD),
("MmZeroedPageListHead", wintypes.DWORD),
("MmFreePageListHead", wintypes.DWORD),
("MmStandbyPageListHead", wintypes.DWORD),
("MmModifiedPageListHead", wintypes.DWORD),
("MmModifiedNoWritePageListHead", wintypes.DWORD),
("MmAvailablePages", wintypes.DWORD),
("MmResidentAvailablePages", wintypes.DWORD),
("PoolTrackTable", wintypes.DWORD),
("NonPagedPoolDescriptor", wintypes.DWORD),
("MmHighestUserAddress", wintypes.DWORD),
("MmSystemRangeStart", wintypes.DWORD),
("MmUserProbeAddress", wintypes.DWORD),
("KdPrintCircularBuffer", wintypes.DWORD),
("KdPrintCircularBufferEnd", wintypes.DWORD),
("KdPrintWritePointer", wintypes.DWORD),
("KdPrintRolloverCount", wintypes.DWORD),
("MmLoadedUserImageList", wintypes.DWORD),
]#[repr(C)]
pub struct LIST_ENTRY32 {
pub Flink: u32,
pub Blink: u32,
}
#[repr(C)]
pub struct DBGKD_DEBUG_DATA_HEADER32 {
pub List: LIST_ENTRY32,
pub OwnerTag: u32,
pub Size: u32,
}
#[repr(C)]
pub struct KDDEBUGGER_DATA32 {
pub Header: DBGKD_DEBUG_DATA_HEADER32,
pub KernBase: u32,
pub BreakpointWithStatus: u32,
pub SavedContext: u32,
pub ThCallbackStack: u16,
pub NextCallback: u16,
pub FramePointer: u16,
pub _bitfield: u16,
pub KiCallUserMode: u32,
pub KeUserCallbackDispatcher: u32,
pub PsLoadedModuleList: u32,
pub PsActiveProcessHead: u32,
pub PspCidTable: u32,
pub ExpSystemResourcesList: u32,
pub ExpPagedPoolDescriptor: u32,
pub ExpNumberOfPagedPools: u32,
pub KeTimeIncrement: u32,
pub KeBugCheckCallbackListHead: u32,
pub KiBugcheckData: u32,
pub IopErrorLogListHead: u32,
pub ObpRootDirectoryObject: u32,
pub ObpTypeObjectType: u32,
pub MmSystemCacheStart: u32,
pub MmSystemCacheEnd: u32,
pub MmSystemCacheWs: u32,
pub MmPfnDatabase: u32,
pub MmSystemPtesStart: u32,
pub MmSystemPtesEnd: u32,
pub MmSubsectionBase: u32,
pub MmNumberOfPagingFiles: u32,
pub MmLowestPhysicalPage: u32,
pub MmHighestPhysicalPage: u32,
pub MmNumberOfPhysicalPages: u32,
pub MmMaximumNonPagedPoolInBytes: u32,
pub MmNonPagedSystemStart: u32,
pub MmNonPagedPoolStart: u32,
pub MmNonPagedPoolEnd: u32,
pub MmPagedPoolStart: u32,
pub MmPagedPoolEnd: u32,
pub MmPagedPoolInformation: u32,
pub MmPageSize: u32,
pub MmSizeOfPagedPoolInBytes: u32,
pub MmTotalCommitLimit: u32,
pub MmTotalCommittedPages: u32,
pub MmSharedCommit: u32,
pub MmDriverCommit: u32,
pub MmProcessCommit: u32,
pub MmPagedPoolCommit: u32,
pub MmExtendedCommit: u32,
pub MmZeroedPageListHead: u32,
pub MmFreePageListHead: u32,
pub MmStandbyPageListHead: u32,
pub MmModifiedPageListHead: u32,
pub MmModifiedNoWritePageListHead: u32,
pub MmAvailablePages: u32,
pub MmResidentAvailablePages: u32,
pub PoolTrackTable: u32,
pub NonPagedPoolDescriptor: u32,
pub MmHighestUserAddress: u32,
pub MmSystemRangeStart: u32,
pub MmUserProbeAddress: u32,
pub KdPrintCircularBuffer: u32,
pub KdPrintCircularBufferEnd: u32,
pub KdPrintWritePointer: u32,
pub KdPrintRolloverCount: u32,
pub MmLoadedUserImageList: u32,
}import "golang.org/x/sys/windows"
type LIST_ENTRY32 struct {
Flink uint32
Blink uint32
}
type DBGKD_DEBUG_DATA_HEADER32 struct {
List LIST_ENTRY32
OwnerTag uint32
Size uint32
}
type KDDEBUGGER_DATA32 struct {
Header DBGKD_DEBUG_DATA_HEADER32
KernBase uint32
BreakpointWithStatus uint32
SavedContext uint32
ThCallbackStack uint16
NextCallback uint16
FramePointer uint16
_bitfield uint16
KiCallUserMode uint32
KeUserCallbackDispatcher uint32
PsLoadedModuleList uint32
PsActiveProcessHead uint32
PspCidTable uint32
ExpSystemResourcesList uint32
ExpPagedPoolDescriptor uint32
ExpNumberOfPagedPools uint32
KeTimeIncrement uint32
KeBugCheckCallbackListHead uint32
KiBugcheckData uint32
IopErrorLogListHead uint32
ObpRootDirectoryObject uint32
ObpTypeObjectType uint32
MmSystemCacheStart uint32
MmSystemCacheEnd uint32
MmSystemCacheWs uint32
MmPfnDatabase uint32
MmSystemPtesStart uint32
MmSystemPtesEnd uint32
MmSubsectionBase uint32
MmNumberOfPagingFiles uint32
MmLowestPhysicalPage uint32
MmHighestPhysicalPage uint32
MmNumberOfPhysicalPages uint32
MmMaximumNonPagedPoolInBytes uint32
MmNonPagedSystemStart uint32
MmNonPagedPoolStart uint32
MmNonPagedPoolEnd uint32
MmPagedPoolStart uint32
MmPagedPoolEnd uint32
MmPagedPoolInformation uint32
MmPageSize uint32
MmSizeOfPagedPoolInBytes uint32
MmTotalCommitLimit uint32
MmTotalCommittedPages uint32
MmSharedCommit uint32
MmDriverCommit uint32
MmProcessCommit uint32
MmPagedPoolCommit uint32
MmExtendedCommit uint32
MmZeroedPageListHead uint32
MmFreePageListHead uint32
MmStandbyPageListHead uint32
MmModifiedPageListHead uint32
MmModifiedNoWritePageListHead uint32
MmAvailablePages uint32
MmResidentAvailablePages uint32
PoolTrackTable uint32
NonPagedPoolDescriptor uint32
MmHighestUserAddress uint32
MmSystemRangeStart uint32
MmUserProbeAddress uint32
KdPrintCircularBuffer uint32
KdPrintCircularBufferEnd uint32
KdPrintWritePointer uint32
KdPrintRolloverCount uint32
MmLoadedUserImageList uint32
}type
LIST_ENTRY32 = record
Flink: DWORD;
Blink: DWORD;
end;
DBGKD_DEBUG_DATA_HEADER32 = record
List: LIST_ENTRY32;
OwnerTag: DWORD;
Size: DWORD;
end;
KDDEBUGGER_DATA32 = record
Header: DBGKD_DEBUG_DATA_HEADER32;
KernBase: DWORD;
BreakpointWithStatus: DWORD;
SavedContext: DWORD;
ThCallbackStack: Word;
NextCallback: Word;
FramePointer: Word;
_bitfield: Word;
KiCallUserMode: DWORD;
KeUserCallbackDispatcher: DWORD;
PsLoadedModuleList: DWORD;
PsActiveProcessHead: DWORD;
PspCidTable: DWORD;
ExpSystemResourcesList: DWORD;
ExpPagedPoolDescriptor: DWORD;
ExpNumberOfPagedPools: DWORD;
KeTimeIncrement: DWORD;
KeBugCheckCallbackListHead: DWORD;
KiBugcheckData: DWORD;
IopErrorLogListHead: DWORD;
ObpRootDirectoryObject: DWORD;
ObpTypeObjectType: DWORD;
MmSystemCacheStart: DWORD;
MmSystemCacheEnd: DWORD;
MmSystemCacheWs: DWORD;
MmPfnDatabase: DWORD;
MmSystemPtesStart: DWORD;
MmSystemPtesEnd: DWORD;
MmSubsectionBase: DWORD;
MmNumberOfPagingFiles: DWORD;
MmLowestPhysicalPage: DWORD;
MmHighestPhysicalPage: DWORD;
MmNumberOfPhysicalPages: DWORD;
MmMaximumNonPagedPoolInBytes: DWORD;
MmNonPagedSystemStart: DWORD;
MmNonPagedPoolStart: DWORD;
MmNonPagedPoolEnd: DWORD;
MmPagedPoolStart: DWORD;
MmPagedPoolEnd: DWORD;
MmPagedPoolInformation: DWORD;
MmPageSize: DWORD;
MmSizeOfPagedPoolInBytes: DWORD;
MmTotalCommitLimit: DWORD;
MmTotalCommittedPages: DWORD;
MmSharedCommit: DWORD;
MmDriverCommit: DWORD;
MmProcessCommit: DWORD;
MmPagedPoolCommit: DWORD;
MmExtendedCommit: DWORD;
MmZeroedPageListHead: DWORD;
MmFreePageListHead: DWORD;
MmStandbyPageListHead: DWORD;
MmModifiedPageListHead: DWORD;
MmModifiedNoWritePageListHead: DWORD;
MmAvailablePages: DWORD;
MmResidentAvailablePages: DWORD;
PoolTrackTable: DWORD;
NonPagedPoolDescriptor: DWORD;
MmHighestUserAddress: DWORD;
MmSystemRangeStart: DWORD;
MmUserProbeAddress: DWORD;
KdPrintCircularBuffer: DWORD;
KdPrintCircularBufferEnd: DWORD;
KdPrintWritePointer: DWORD;
KdPrintRolloverCount: DWORD;
MmLoadedUserImageList: DWORD;
end;const LIST_ENTRY32 = extern struct {
Flink: u32,
Blink: u32,
};
const DBGKD_DEBUG_DATA_HEADER32 = extern struct {
List: LIST_ENTRY32,
OwnerTag: u32,
Size: u32,
};
const KDDEBUGGER_DATA32 = extern struct {
Header: DBGKD_DEBUG_DATA_HEADER32,
KernBase: u32,
BreakpointWithStatus: u32,
SavedContext: u32,
ThCallbackStack: u16,
NextCallback: u16,
FramePointer: u16,
_bitfield: u16,
KiCallUserMode: u32,
KeUserCallbackDispatcher: u32,
PsLoadedModuleList: u32,
PsActiveProcessHead: u32,
PspCidTable: u32,
ExpSystemResourcesList: u32,
ExpPagedPoolDescriptor: u32,
ExpNumberOfPagedPools: u32,
KeTimeIncrement: u32,
KeBugCheckCallbackListHead: u32,
KiBugcheckData: u32,
IopErrorLogListHead: u32,
ObpRootDirectoryObject: u32,
ObpTypeObjectType: u32,
MmSystemCacheStart: u32,
MmSystemCacheEnd: u32,
MmSystemCacheWs: u32,
MmPfnDatabase: u32,
MmSystemPtesStart: u32,
MmSystemPtesEnd: u32,
MmSubsectionBase: u32,
MmNumberOfPagingFiles: u32,
MmLowestPhysicalPage: u32,
MmHighestPhysicalPage: u32,
MmNumberOfPhysicalPages: u32,
MmMaximumNonPagedPoolInBytes: u32,
MmNonPagedSystemStart: u32,
MmNonPagedPoolStart: u32,
MmNonPagedPoolEnd: u32,
MmPagedPoolStart: u32,
MmPagedPoolEnd: u32,
MmPagedPoolInformation: u32,
MmPageSize: u32,
MmSizeOfPagedPoolInBytes: u32,
MmTotalCommitLimit: u32,
MmTotalCommittedPages: u32,
MmSharedCommit: u32,
MmDriverCommit: u32,
MmProcessCommit: u32,
MmPagedPoolCommit: u32,
MmExtendedCommit: u32,
MmZeroedPageListHead: u32,
MmFreePageListHead: u32,
MmStandbyPageListHead: u32,
MmModifiedPageListHead: u32,
MmModifiedNoWritePageListHead: u32,
MmAvailablePages: u32,
MmResidentAvailablePages: u32,
PoolTrackTable: u32,
NonPagedPoolDescriptor: u32,
MmHighestUserAddress: u32,
MmSystemRangeStart: u32,
MmUserProbeAddress: u32,
KdPrintCircularBuffer: u32,
KdPrintCircularBufferEnd: u32,
KdPrintWritePointer: u32,
KdPrintRolloverCount: u32,
MmLoadedUserImageList: u32,
};type
LIST_ENTRY32 {.bycopy.} = object
Flink: uint32
Blink: uint32
DBGKD_DEBUG_DATA_HEADER32 {.bycopy.} = object
List: LIST_ENTRY32
OwnerTag: uint32
Size: uint32
KDDEBUGGER_DATA32 {.bycopy.} = object
Header: DBGKD_DEBUG_DATA_HEADER32
KernBase: uint32
BreakpointWithStatus: uint32
SavedContext: uint32
ThCallbackStack: uint16
NextCallback: uint16
FramePointer: uint16
_bitfield: uint16
KiCallUserMode: uint32
KeUserCallbackDispatcher: uint32
PsLoadedModuleList: uint32
PsActiveProcessHead: uint32
PspCidTable: uint32
ExpSystemResourcesList: uint32
ExpPagedPoolDescriptor: uint32
ExpNumberOfPagedPools: uint32
KeTimeIncrement: uint32
KeBugCheckCallbackListHead: uint32
KiBugcheckData: uint32
IopErrorLogListHead: uint32
ObpRootDirectoryObject: uint32
ObpTypeObjectType: uint32
MmSystemCacheStart: uint32
MmSystemCacheEnd: uint32
MmSystemCacheWs: uint32
MmPfnDatabase: uint32
MmSystemPtesStart: uint32
MmSystemPtesEnd: uint32
MmSubsectionBase: uint32
MmNumberOfPagingFiles: uint32
MmLowestPhysicalPage: uint32
MmHighestPhysicalPage: uint32
MmNumberOfPhysicalPages: uint32
MmMaximumNonPagedPoolInBytes: uint32
MmNonPagedSystemStart: uint32
MmNonPagedPoolStart: uint32
MmNonPagedPoolEnd: uint32
MmPagedPoolStart: uint32
MmPagedPoolEnd: uint32
MmPagedPoolInformation: uint32
MmPageSize: uint32
MmSizeOfPagedPoolInBytes: uint32
MmTotalCommitLimit: uint32
MmTotalCommittedPages: uint32
MmSharedCommit: uint32
MmDriverCommit: uint32
MmProcessCommit: uint32
MmPagedPoolCommit: uint32
MmExtendedCommit: uint32
MmZeroedPageListHead: uint32
MmFreePageListHead: uint32
MmStandbyPageListHead: uint32
MmModifiedPageListHead: uint32
MmModifiedNoWritePageListHead: uint32
MmAvailablePages: uint32
MmResidentAvailablePages: uint32
PoolTrackTable: uint32
NonPagedPoolDescriptor: uint32
MmHighestUserAddress: uint32
MmSystemRangeStart: uint32
MmUserProbeAddress: uint32
KdPrintCircularBuffer: uint32
KdPrintCircularBufferEnd: uint32
KdPrintWritePointer: uint32
KdPrintRolloverCount: uint32
MmLoadedUserImageList: uint32struct LIST_ENTRY32
{
uint Flink;
uint Blink;
}
struct DBGKD_DEBUG_DATA_HEADER32
{
LIST_ENTRY32 List;
uint OwnerTag;
uint Size;
}
struct KDDEBUGGER_DATA32
{
DBGKD_DEBUG_DATA_HEADER32 Header;
uint KernBase;
uint BreakpointWithStatus;
uint SavedContext;
ushort ThCallbackStack;
ushort NextCallback;
ushort FramePointer;
ushort _bitfield;
uint KiCallUserMode;
uint KeUserCallbackDispatcher;
uint PsLoadedModuleList;
uint PsActiveProcessHead;
uint PspCidTable;
uint ExpSystemResourcesList;
uint ExpPagedPoolDescriptor;
uint ExpNumberOfPagedPools;
uint KeTimeIncrement;
uint KeBugCheckCallbackListHead;
uint KiBugcheckData;
uint IopErrorLogListHead;
uint ObpRootDirectoryObject;
uint ObpTypeObjectType;
uint MmSystemCacheStart;
uint MmSystemCacheEnd;
uint MmSystemCacheWs;
uint MmPfnDatabase;
uint MmSystemPtesStart;
uint MmSystemPtesEnd;
uint MmSubsectionBase;
uint MmNumberOfPagingFiles;
uint MmLowestPhysicalPage;
uint MmHighestPhysicalPage;
uint MmNumberOfPhysicalPages;
uint MmMaximumNonPagedPoolInBytes;
uint MmNonPagedSystemStart;
uint MmNonPagedPoolStart;
uint MmNonPagedPoolEnd;
uint MmPagedPoolStart;
uint MmPagedPoolEnd;
uint MmPagedPoolInformation;
uint MmPageSize;
uint MmSizeOfPagedPoolInBytes;
uint MmTotalCommitLimit;
uint MmTotalCommittedPages;
uint MmSharedCommit;
uint MmDriverCommit;
uint MmProcessCommit;
uint MmPagedPoolCommit;
uint MmExtendedCommit;
uint MmZeroedPageListHead;
uint MmFreePageListHead;
uint MmStandbyPageListHead;
uint MmModifiedPageListHead;
uint MmModifiedNoWritePageListHead;
uint MmAvailablePages;
uint MmResidentAvailablePages;
uint PoolTrackTable;
uint NonPagedPoolDescriptor;
uint MmHighestUserAddress;
uint MmSystemRangeStart;
uint MmUserProbeAddress;
uint KdPrintCircularBuffer;
uint KdPrintCircularBufferEnd;
uint KdPrintWritePointer;
uint KdPrintRolloverCount;
uint MmLoadedUserImageList;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; KDDEBUGGER_DATA32 サイズ: 268 バイト(x64)
dim st, 67 ; 4byte整数×67(構造体サイズ 268 / 4 切り上げ)
; Header : DBGKD_DEBUG_DATA_HEADER32 (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; KernBase : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; BreakpointWithStatus : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; SavedContext : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; ThCallbackStack : WORD (+28, 2byte) wpoke st,28,値 / 値 = wpeek(st,28)
; NextCallback : WORD (+30, 2byte) wpoke st,30,値 / 値 = wpeek(st,30)
; FramePointer : WORD (+32, 2byte) wpoke st,32,値 / 値 = wpeek(st,32)
; _bitfield : WORD (+34, 2byte) wpoke st,34,値 / 値 = wpeek(st,34)
; KiCallUserMode : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; KeUserCallbackDispatcher : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; PsLoadedModuleList : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; PsActiveProcessHead : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; PspCidTable : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; ExpSystemResourcesList : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; ExpPagedPoolDescriptor : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; ExpNumberOfPagedPools : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; KeTimeIncrement : DWORD (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; KeBugCheckCallbackListHead : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; KiBugcheckData : DWORD (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; IopErrorLogListHead : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; ObpRootDirectoryObject : DWORD (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; ObpTypeObjectType : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; MmSystemCacheStart : DWORD (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; MmSystemCacheEnd : DWORD (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; MmSystemCacheWs : DWORD (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; MmPfnDatabase : DWORD (+104, 4byte) st.26 = 値 / 値 = st.26 (lpoke/lpeek も可)
; MmSystemPtesStart : DWORD (+108, 4byte) st.27 = 値 / 値 = st.27 (lpoke/lpeek も可)
; MmSystemPtesEnd : DWORD (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; MmSubsectionBase : DWORD (+116, 4byte) st.29 = 値 / 値 = st.29 (lpoke/lpeek も可)
; MmNumberOfPagingFiles : DWORD (+120, 4byte) st.30 = 値 / 値 = st.30 (lpoke/lpeek も可)
; MmLowestPhysicalPage : DWORD (+124, 4byte) st.31 = 値 / 値 = st.31 (lpoke/lpeek も可)
; MmHighestPhysicalPage : DWORD (+128, 4byte) st.32 = 値 / 値 = st.32 (lpoke/lpeek も可)
; MmNumberOfPhysicalPages : DWORD (+132, 4byte) st.33 = 値 / 値 = st.33 (lpoke/lpeek も可)
; MmMaximumNonPagedPoolInBytes : DWORD (+136, 4byte) st.34 = 値 / 値 = st.34 (lpoke/lpeek も可)
; MmNonPagedSystemStart : DWORD (+140, 4byte) st.35 = 値 / 値 = st.35 (lpoke/lpeek も可)
; MmNonPagedPoolStart : DWORD (+144, 4byte) st.36 = 値 / 値 = st.36 (lpoke/lpeek も可)
; MmNonPagedPoolEnd : DWORD (+148, 4byte) st.37 = 値 / 値 = st.37 (lpoke/lpeek も可)
; MmPagedPoolStart : DWORD (+152, 4byte) st.38 = 値 / 値 = st.38 (lpoke/lpeek も可)
; MmPagedPoolEnd : DWORD (+156, 4byte) st.39 = 値 / 値 = st.39 (lpoke/lpeek も可)
; MmPagedPoolInformation : DWORD (+160, 4byte) st.40 = 値 / 値 = st.40 (lpoke/lpeek も可)
; MmPageSize : DWORD (+164, 4byte) st.41 = 値 / 値 = st.41 (lpoke/lpeek も可)
; MmSizeOfPagedPoolInBytes : DWORD (+168, 4byte) st.42 = 値 / 値 = st.42 (lpoke/lpeek も可)
; MmTotalCommitLimit : DWORD (+172, 4byte) st.43 = 値 / 値 = st.43 (lpoke/lpeek も可)
; MmTotalCommittedPages : DWORD (+176, 4byte) st.44 = 値 / 値 = st.44 (lpoke/lpeek も可)
; MmSharedCommit : DWORD (+180, 4byte) st.45 = 値 / 値 = st.45 (lpoke/lpeek も可)
; MmDriverCommit : DWORD (+184, 4byte) st.46 = 値 / 値 = st.46 (lpoke/lpeek も可)
; MmProcessCommit : DWORD (+188, 4byte) st.47 = 値 / 値 = st.47 (lpoke/lpeek も可)
; MmPagedPoolCommit : DWORD (+192, 4byte) st.48 = 値 / 値 = st.48 (lpoke/lpeek も可)
; MmExtendedCommit : DWORD (+196, 4byte) st.49 = 値 / 値 = st.49 (lpoke/lpeek も可)
; MmZeroedPageListHead : DWORD (+200, 4byte) st.50 = 値 / 値 = st.50 (lpoke/lpeek も可)
; MmFreePageListHead : DWORD (+204, 4byte) st.51 = 値 / 値 = st.51 (lpoke/lpeek も可)
; MmStandbyPageListHead : DWORD (+208, 4byte) st.52 = 値 / 値 = st.52 (lpoke/lpeek も可)
; MmModifiedPageListHead : DWORD (+212, 4byte) st.53 = 値 / 値 = st.53 (lpoke/lpeek も可)
; MmModifiedNoWritePageListHead : DWORD (+216, 4byte) st.54 = 値 / 値 = st.54 (lpoke/lpeek も可)
; MmAvailablePages : DWORD (+220, 4byte) st.55 = 値 / 値 = st.55 (lpoke/lpeek も可)
; MmResidentAvailablePages : DWORD (+224, 4byte) st.56 = 値 / 値 = st.56 (lpoke/lpeek も可)
; PoolTrackTable : DWORD (+228, 4byte) st.57 = 値 / 値 = st.57 (lpoke/lpeek も可)
; NonPagedPoolDescriptor : DWORD (+232, 4byte) st.58 = 値 / 値 = st.58 (lpoke/lpeek も可)
; MmHighestUserAddress : DWORD (+236, 4byte) st.59 = 値 / 値 = st.59 (lpoke/lpeek も可)
; MmSystemRangeStart : DWORD (+240, 4byte) st.60 = 値 / 値 = st.60 (lpoke/lpeek も可)
; MmUserProbeAddress : DWORD (+244, 4byte) st.61 = 値 / 値 = st.61 (lpoke/lpeek も可)
; KdPrintCircularBuffer : DWORD (+248, 4byte) st.62 = 値 / 値 = st.62 (lpoke/lpeek も可)
; KdPrintCircularBufferEnd : DWORD (+252, 4byte) st.63 = 値 / 値 = st.63 (lpoke/lpeek も可)
; KdPrintWritePointer : DWORD (+256, 4byte) st.64 = 値 / 値 = st.64 (lpoke/lpeek も可)
; KdPrintRolloverCount : DWORD (+260, 4byte) st.65 = 値 / 値 = st.65 (lpoke/lpeek も可)
; MmLoadedUserImageList : DWORD (+264, 4byte) st.66 = 値 / 値 = st.66 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global LIST_ENTRY32
#field int Flink
#field int Blink
#endstruct
#defstruct global DBGKD_DEBUG_DATA_HEADER32
#field LIST_ENTRY32 List
#field int OwnerTag
#field int Size
#endstruct
#defstruct global KDDEBUGGER_DATA32
#field DBGKD_DEBUG_DATA_HEADER32 Header
#field int KernBase
#field int BreakpointWithStatus
#field int SavedContext
#field short ThCallbackStack
#field short NextCallback
#field short FramePointer
#field short _bitfield
#field int KiCallUserMode
#field int KeUserCallbackDispatcher
#field int PsLoadedModuleList
#field int PsActiveProcessHead
#field int PspCidTable
#field int ExpSystemResourcesList
#field int ExpPagedPoolDescriptor
#field int ExpNumberOfPagedPools
#field int KeTimeIncrement
#field int KeBugCheckCallbackListHead
#field int KiBugcheckData
#field int IopErrorLogListHead
#field int ObpRootDirectoryObject
#field int ObpTypeObjectType
#field int MmSystemCacheStart
#field int MmSystemCacheEnd
#field int MmSystemCacheWs
#field int MmPfnDatabase
#field int MmSystemPtesStart
#field int MmSystemPtesEnd
#field int MmSubsectionBase
#field int MmNumberOfPagingFiles
#field int MmLowestPhysicalPage
#field int MmHighestPhysicalPage
#field int MmNumberOfPhysicalPages
#field int MmMaximumNonPagedPoolInBytes
#field int MmNonPagedSystemStart
#field int MmNonPagedPoolStart
#field int MmNonPagedPoolEnd
#field int MmPagedPoolStart
#field int MmPagedPoolEnd
#field int MmPagedPoolInformation
#field int MmPageSize
#field int MmSizeOfPagedPoolInBytes
#field int MmTotalCommitLimit
#field int MmTotalCommittedPages
#field int MmSharedCommit
#field int MmDriverCommit
#field int MmProcessCommit
#field int MmPagedPoolCommit
#field int MmExtendedCommit
#field int MmZeroedPageListHead
#field int MmFreePageListHead
#field int MmStandbyPageListHead
#field int MmModifiedPageListHead
#field int MmModifiedNoWritePageListHead
#field int MmAvailablePages
#field int MmResidentAvailablePages
#field int PoolTrackTable
#field int NonPagedPoolDescriptor
#field int MmHighestUserAddress
#field int MmSystemRangeStart
#field int MmUserProbeAddress
#field int KdPrintCircularBuffer
#field int KdPrintCircularBufferEnd
#field int KdPrintWritePointer
#field int KdPrintRolloverCount
#field int MmLoadedUserImageList
#endstruct
stdim st, KDDEBUGGER_DATA32 ; NSTRUCT 変数を確保
st->KernBase = 100
mes "KernBase=" + st->KernBase