ホーム › System.Diagnostics.Debug.Extensions › DBGKD_GET_VERSION32
DBGKD_GET_VERSION32
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| MajorVersion | WORD | 2 | +0 | +0 | OSのメジャーバージョン番号。 |
| MinorVersion | WORD | 2 | +2 | +2 | OSのマイナーバージョン番号(ビルド番号)。 |
| ProtocolVersion | WORD | 2 | +4 | +4 | カーネルデバッグプロトコルのバージョン。 |
| Flags | WORD | 2 | +6 | +6 | バージョン情報のフラグ(マルチプロセッサ等)。 |
| KernBase | DWORD | 4 | +8 | +8 | カーネルイメージの基底アドレス(32ビット)。 |
| PsLoadedModuleList | DWORD | 4 | +12 | +12 | 読み込み済みモジュールリストのアドレス(32ビット)。 |
| MachineType | WORD | 2 | +16 | +16 | 対象マシンのアーキテクチャ種別。 |
| ThCallbackStack | WORD | 2 | +18 | +18 | スレッドのコールバックスタックのオフセット。 |
| NextCallback | WORD | 2 | +20 | +20 | 次のコールバックフレームのオフセット。 |
| FramePointer | WORD | 2 | +22 | +22 | コールバックフレームポインタのオフセット。 |
| KiCallUserMode | DWORD | 4 | +24 | +24 | KiCallUserMode関数のアドレス(32ビット)。 |
| KeUserCallbackDispatcher | DWORD | 4 | +28 | +28 | ユーザーコールバックディスパッチャのアドレス。 |
| BreakpointWithStatus | DWORD | 4 | +32 | +32 | ステータス付きブレークポイント命令のアドレス。 |
| DebuggerDataList | DWORD | 4 | +36 | +36 | デバッガデータブロックリストのアドレス。 |
各言語での定義
#include <windows.h>
// DBGKD_GET_VERSION32 (x64 40 / x86 40 バイト)
typedef struct DBGKD_GET_VERSION32 {
WORD MajorVersion;
WORD MinorVersion;
WORD ProtocolVersion;
WORD Flags;
DWORD KernBase;
DWORD PsLoadedModuleList;
WORD MachineType;
WORD ThCallbackStack;
WORD NextCallback;
WORD FramePointer;
DWORD KiCallUserMode;
DWORD KeUserCallbackDispatcher;
DWORD BreakpointWithStatus;
DWORD DebuggerDataList;
} DBGKD_GET_VERSION32;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DBGKD_GET_VERSION32
{
public ushort MajorVersion;
public ushort MinorVersion;
public ushort ProtocolVersion;
public ushort Flags;
public uint KernBase;
public uint PsLoadedModuleList;
public ushort MachineType;
public ushort ThCallbackStack;
public ushort NextCallback;
public ushort FramePointer;
public uint KiCallUserMode;
public uint KeUserCallbackDispatcher;
public uint BreakpointWithStatus;
public uint DebuggerDataList;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DBGKD_GET_VERSION32
Public MajorVersion As UShort
Public MinorVersion As UShort
Public ProtocolVersion As UShort
Public Flags As UShort
Public KernBase As UInteger
Public PsLoadedModuleList As UInteger
Public MachineType As UShort
Public ThCallbackStack As UShort
Public NextCallback As UShort
Public FramePointer As UShort
Public KiCallUserMode As UInteger
Public KeUserCallbackDispatcher As UInteger
Public BreakpointWithStatus As UInteger
Public DebuggerDataList As UInteger
End Structureimport ctypes
from ctypes import wintypes
class DBGKD_GET_VERSION32(ctypes.Structure):
_fields_ = [
("MajorVersion", ctypes.c_ushort),
("MinorVersion", ctypes.c_ushort),
("ProtocolVersion", ctypes.c_ushort),
("Flags", ctypes.c_ushort),
("KernBase", wintypes.DWORD),
("PsLoadedModuleList", wintypes.DWORD),
("MachineType", ctypes.c_ushort),
("ThCallbackStack", ctypes.c_ushort),
("NextCallback", ctypes.c_ushort),
("FramePointer", ctypes.c_ushort),
("KiCallUserMode", wintypes.DWORD),
("KeUserCallbackDispatcher", wintypes.DWORD),
("BreakpointWithStatus", wintypes.DWORD),
("DebuggerDataList", wintypes.DWORD),
]#[repr(C)]
pub struct DBGKD_GET_VERSION32 {
pub MajorVersion: u16,
pub MinorVersion: u16,
pub ProtocolVersion: u16,
pub Flags: u16,
pub KernBase: u32,
pub PsLoadedModuleList: u32,
pub MachineType: u16,
pub ThCallbackStack: u16,
pub NextCallback: u16,
pub FramePointer: u16,
pub KiCallUserMode: u32,
pub KeUserCallbackDispatcher: u32,
pub BreakpointWithStatus: u32,
pub DebuggerDataList: u32,
}import "golang.org/x/sys/windows"
type DBGKD_GET_VERSION32 struct {
MajorVersion uint16
MinorVersion uint16
ProtocolVersion uint16
Flags uint16
KernBase uint32
PsLoadedModuleList uint32
MachineType uint16
ThCallbackStack uint16
NextCallback uint16
FramePointer uint16
KiCallUserMode uint32
KeUserCallbackDispatcher uint32
BreakpointWithStatus uint32
DebuggerDataList uint32
}type
DBGKD_GET_VERSION32 = record
MajorVersion: Word;
MinorVersion: Word;
ProtocolVersion: Word;
Flags: Word;
KernBase: DWORD;
PsLoadedModuleList: DWORD;
MachineType: Word;
ThCallbackStack: Word;
NextCallback: Word;
FramePointer: Word;
KiCallUserMode: DWORD;
KeUserCallbackDispatcher: DWORD;
BreakpointWithStatus: DWORD;
DebuggerDataList: DWORD;
end;const DBGKD_GET_VERSION32 = extern struct {
MajorVersion: u16,
MinorVersion: u16,
ProtocolVersion: u16,
Flags: u16,
KernBase: u32,
PsLoadedModuleList: u32,
MachineType: u16,
ThCallbackStack: u16,
NextCallback: u16,
FramePointer: u16,
KiCallUserMode: u32,
KeUserCallbackDispatcher: u32,
BreakpointWithStatus: u32,
DebuggerDataList: u32,
};type
DBGKD_GET_VERSION32 {.bycopy.} = object
MajorVersion: uint16
MinorVersion: uint16
ProtocolVersion: uint16
Flags: uint16
KernBase: uint32
PsLoadedModuleList: uint32
MachineType: uint16
ThCallbackStack: uint16
NextCallback: uint16
FramePointer: uint16
KiCallUserMode: uint32
KeUserCallbackDispatcher: uint32
BreakpointWithStatus: uint32
DebuggerDataList: uint32struct DBGKD_GET_VERSION32
{
ushort MajorVersion;
ushort MinorVersion;
ushort ProtocolVersion;
ushort Flags;
uint KernBase;
uint PsLoadedModuleList;
ushort MachineType;
ushort ThCallbackStack;
ushort NextCallback;
ushort FramePointer;
uint KiCallUserMode;
uint KeUserCallbackDispatcher;
uint BreakpointWithStatus;
uint DebuggerDataList;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DBGKD_GET_VERSION32 サイズ: 40 バイト(x64)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; MajorVersion : WORD (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; MinorVersion : WORD (+2, 2byte) wpoke st,2,値 / 値 = wpeek(st,2)
; ProtocolVersion : WORD (+4, 2byte) wpoke st,4,値 / 値 = wpeek(st,4)
; Flags : WORD (+6, 2byte) wpoke st,6,値 / 値 = wpeek(st,6)
; KernBase : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; PsLoadedModuleList : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; MachineType : WORD (+16, 2byte) wpoke st,16,値 / 値 = wpeek(st,16)
; ThCallbackStack : WORD (+18, 2byte) wpoke st,18,値 / 値 = wpeek(st,18)
; NextCallback : WORD (+20, 2byte) wpoke st,20,値 / 値 = wpeek(st,20)
; FramePointer : WORD (+22, 2byte) wpoke st,22,値 / 値 = wpeek(st,22)
; KiCallUserMode : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; KeUserCallbackDispatcher : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; BreakpointWithStatus : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; DebuggerDataList : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DBGKD_GET_VERSION32
#field short MajorVersion
#field short MinorVersion
#field short ProtocolVersion
#field short Flags
#field int KernBase
#field int PsLoadedModuleList
#field short MachineType
#field short ThCallbackStack
#field short NextCallback
#field short FramePointer
#field int KiCallUserMode
#field int KeUserCallbackDispatcher
#field int BreakpointWithStatus
#field int DebuggerDataList
#endstruct
stdim st, DBGKD_GET_VERSION32 ; NSTRUCT 変数を確保
st->MajorVersion = 100
mes "MajorVersion=" + st->MajorVersion