ホーム › System.Diagnostics.Debug › MINIDUMP_MODULE_CALLBACK
MINIDUMP_MODULE_CALLBACK
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| FullPath | LPWSTR | 8/4 | +0 | +0 | モジュールファイルの完全パスを示すワイド文字列。 |
| BaseOfImage | ULONGLONG | 8 | +8 | +4 | メモリ上にロードされたモジュールのベースアドレスを示す。 |
| SizeOfImage | DWORD | 4 | +16 | +12 | ロードされたイメージのバイトサイズを示す。 |
| CheckSum | DWORD | 4 | +20 | +16 | モジュールのチェックサム値を示す。 |
| TimeDateStamp | DWORD | 4 | +24 | +20 | モジュールのタイムスタンプ(リンク日時)を示す。 |
| VersionInfo | VS_FIXEDFILEINFO | 52 | +28 | +24 | モジュールのバージョン情報(VS_FIXEDFILEINFO)を保持する。 |
| CvRecord | void* | 8/4 | +80 | +76 | CodeView デバッグ情報レコードを指すポインタ。NULL の場合あり。 |
| SizeOfCvRecord | DWORD | 4 | +88 | +80 | CvRecord のバイト数を示す。 |
| MiscRecord | void* | 8/4 | +92 | +84 | その他のデバッグ情報レコードを指すポインタ。NULL の場合あり。 |
| SizeOfMiscRecord | DWORD | 4 | +100 | +88 | MiscRecord のバイト数を示す。 |
各言語での定義
#include <windows.h>
// VS_FIXEDFILEINFO (x64 52 / x86 52 バイト)
typedef struct VS_FIXEDFILEINFO {
DWORD dwSignature;
DWORD dwStrucVersion;
DWORD dwFileVersionMS;
DWORD dwFileVersionLS;
DWORD dwProductVersionMS;
DWORD dwProductVersionLS;
DWORD dwFileFlagsMask;
VS_FIXEDFILEINFO_FILE_FLAGS dwFileFlags;
VS_FIXEDFILEINFO_FILE_OS dwFileOS;
DWORD dwFileType;
DWORD dwFileSubtype;
DWORD dwFileDateMS;
DWORD dwFileDateLS;
} VS_FIXEDFILEINFO;
// MINIDUMP_MODULE_CALLBACK (x64 104 / x86 92 バイト)
#pragma pack(push, 4)
typedef struct MINIDUMP_MODULE_CALLBACK {
LPWSTR FullPath;
ULONGLONG BaseOfImage;
DWORD SizeOfImage;
DWORD CheckSum;
DWORD TimeDateStamp;
VS_FIXEDFILEINFO VersionInfo;
void* CvRecord;
DWORD SizeOfCvRecord;
void* MiscRecord;
DWORD SizeOfMiscRecord;
} MINIDUMP_MODULE_CALLBACK;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VS_FIXEDFILEINFO
{
public uint dwSignature;
public uint dwStrucVersion;
public uint dwFileVersionMS;
public uint dwFileVersionLS;
public uint dwProductVersionMS;
public uint dwProductVersionLS;
public uint dwFileFlagsMask;
public uint dwFileFlags;
public uint dwFileOS;
public uint dwFileType;
public uint dwFileSubtype;
public uint dwFileDateMS;
public uint dwFileDateLS;
}
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
public struct MINIDUMP_MODULE_CALLBACK
{
public IntPtr FullPath;
public ulong BaseOfImage;
public uint SizeOfImage;
public uint CheckSum;
public uint TimeDateStamp;
public VS_FIXEDFILEINFO VersionInfo;
public IntPtr CvRecord;
public uint SizeOfCvRecord;
public IntPtr MiscRecord;
public uint SizeOfMiscRecord;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VS_FIXEDFILEINFO
Public dwSignature As UInteger
Public dwStrucVersion As UInteger
Public dwFileVersionMS As UInteger
Public dwFileVersionLS As UInteger
Public dwProductVersionMS As UInteger
Public dwProductVersionLS As UInteger
Public dwFileFlagsMask As UInteger
Public dwFileFlags As UInteger
Public dwFileOS As UInteger
Public dwFileType As UInteger
Public dwFileSubtype As UInteger
Public dwFileDateMS As UInteger
Public dwFileDateLS As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, Pack:=4, CharSet:=CharSet.Unicode)>
Public Structure MINIDUMP_MODULE_CALLBACK
Public FullPath As IntPtr
Public BaseOfImage As ULong
Public SizeOfImage As UInteger
Public CheckSum As UInteger
Public TimeDateStamp As UInteger
Public VersionInfo As VS_FIXEDFILEINFO
Public CvRecord As IntPtr
Public SizeOfCvRecord As UInteger
Public MiscRecord As IntPtr
Public SizeOfMiscRecord As UInteger
End Structureimport ctypes
from ctypes import wintypes
class VS_FIXEDFILEINFO(ctypes.Structure):
_fields_ = [
("dwSignature", wintypes.DWORD),
("dwStrucVersion", wintypes.DWORD),
("dwFileVersionMS", wintypes.DWORD),
("dwFileVersionLS", wintypes.DWORD),
("dwProductVersionMS", wintypes.DWORD),
("dwProductVersionLS", wintypes.DWORD),
("dwFileFlagsMask", wintypes.DWORD),
("dwFileFlags", wintypes.DWORD),
("dwFileOS", wintypes.DWORD),
("dwFileType", wintypes.DWORD),
("dwFileSubtype", wintypes.DWORD),
("dwFileDateMS", wintypes.DWORD),
("dwFileDateLS", wintypes.DWORD),
]
class MINIDUMP_MODULE_CALLBACK(ctypes.Structure):
_pack_ = 4
_fields_ = [
("FullPath", ctypes.c_void_p),
("BaseOfImage", ctypes.c_ulonglong),
("SizeOfImage", wintypes.DWORD),
("CheckSum", wintypes.DWORD),
("TimeDateStamp", wintypes.DWORD),
("VersionInfo", VS_FIXEDFILEINFO),
("CvRecord", ctypes.c_void_p),
("SizeOfCvRecord", wintypes.DWORD),
("MiscRecord", ctypes.c_void_p),
("SizeOfMiscRecord", wintypes.DWORD),
]#[repr(C)]
pub struct VS_FIXEDFILEINFO {
pub dwSignature: u32,
pub dwStrucVersion: u32,
pub dwFileVersionMS: u32,
pub dwFileVersionLS: u32,
pub dwProductVersionMS: u32,
pub dwProductVersionLS: u32,
pub dwFileFlagsMask: u32,
pub dwFileFlags: u32,
pub dwFileOS: u32,
pub dwFileType: u32,
pub dwFileSubtype: u32,
pub dwFileDateMS: u32,
pub dwFileDateLS: u32,
}
#[repr(C, packed(4))]
pub struct MINIDUMP_MODULE_CALLBACK {
pub FullPath: *mut core::ffi::c_void,
pub BaseOfImage: u64,
pub SizeOfImage: u32,
pub CheckSum: u32,
pub TimeDateStamp: u32,
pub VersionInfo: VS_FIXEDFILEINFO,
pub CvRecord: *mut core::ffi::c_void,
pub SizeOfCvRecord: u32,
pub MiscRecord: *mut core::ffi::c_void,
pub SizeOfMiscRecord: u32,
}import "golang.org/x/sys/windows"
type VS_FIXEDFILEINFO struct {
dwSignature uint32
dwStrucVersion uint32
dwFileVersionMS uint32
dwFileVersionLS uint32
dwProductVersionMS uint32
dwProductVersionLS uint32
dwFileFlagsMask uint32
dwFileFlags uint32
dwFileOS uint32
dwFileType uint32
dwFileSubtype uint32
dwFileDateMS uint32
dwFileDateLS uint32
}
type MINIDUMP_MODULE_CALLBACK struct {
FullPath uintptr
BaseOfImage uint64
SizeOfImage uint32
CheckSum uint32
TimeDateStamp uint32
VersionInfo VS_FIXEDFILEINFO
CvRecord uintptr
SizeOfCvRecord uint32
MiscRecord uintptr
SizeOfMiscRecord uint32
}type
VS_FIXEDFILEINFO = record
dwSignature: DWORD;
dwStrucVersion: DWORD;
dwFileVersionMS: DWORD;
dwFileVersionLS: DWORD;
dwProductVersionMS: DWORD;
dwProductVersionLS: DWORD;
dwFileFlagsMask: DWORD;
dwFileFlags: DWORD;
dwFileOS: DWORD;
dwFileType: DWORD;
dwFileSubtype: DWORD;
dwFileDateMS: DWORD;
dwFileDateLS: DWORD;
end;
MINIDUMP_MODULE_CALLBACK = packed record
FullPath: Pointer;
BaseOfImage: UInt64;
SizeOfImage: DWORD;
CheckSum: DWORD;
TimeDateStamp: DWORD;
VersionInfo: VS_FIXEDFILEINFO;
CvRecord: Pointer;
SizeOfCvRecord: DWORD;
MiscRecord: Pointer;
SizeOfMiscRecord: DWORD;
end;const VS_FIXEDFILEINFO = extern struct {
dwSignature: u32,
dwStrucVersion: u32,
dwFileVersionMS: u32,
dwFileVersionLS: u32,
dwProductVersionMS: u32,
dwProductVersionLS: u32,
dwFileFlagsMask: u32,
dwFileFlags: u32,
dwFileOS: u32,
dwFileType: u32,
dwFileSubtype: u32,
dwFileDateMS: u32,
dwFileDateLS: u32,
};
const MINIDUMP_MODULE_CALLBACK = extern struct {
FullPath: ?*anyopaque,
BaseOfImage: u64,
SizeOfImage: u32,
CheckSum: u32,
TimeDateStamp: u32,
VersionInfo: VS_FIXEDFILEINFO,
CvRecord: ?*anyopaque,
SizeOfCvRecord: u32,
MiscRecord: ?*anyopaque,
SizeOfMiscRecord: u32,
};type
VS_FIXEDFILEINFO {.bycopy.} = object
dwSignature: uint32
dwStrucVersion: uint32
dwFileVersionMS: uint32
dwFileVersionLS: uint32
dwProductVersionMS: uint32
dwProductVersionLS: uint32
dwFileFlagsMask: uint32
dwFileFlags: uint32
dwFileOS: uint32
dwFileType: uint32
dwFileSubtype: uint32
dwFileDateMS: uint32
dwFileDateLS: uint32
MINIDUMP_MODULE_CALLBACK {.packed.} = object
FullPath: pointer
BaseOfImage: uint64
SizeOfImage: uint32
CheckSum: uint32
TimeDateStamp: uint32
VersionInfo: VS_FIXEDFILEINFO
CvRecord: pointer
SizeOfCvRecord: uint32
MiscRecord: pointer
SizeOfMiscRecord: uint32struct VS_FIXEDFILEINFO
{
uint dwSignature;
uint dwStrucVersion;
uint dwFileVersionMS;
uint dwFileVersionLS;
uint dwProductVersionMS;
uint dwProductVersionLS;
uint dwFileFlagsMask;
uint dwFileFlags;
uint dwFileOS;
uint dwFileType;
uint dwFileSubtype;
uint dwFileDateMS;
uint dwFileDateLS;
}
align(4)
struct MINIDUMP_MODULE_CALLBACK
{
void* FullPath;
ulong BaseOfImage;
uint SizeOfImage;
uint CheckSum;
uint TimeDateStamp;
VS_FIXEDFILEINFO VersionInfo;
void* CvRecord;
uint SizeOfCvRecord;
void* MiscRecord;
uint SizeOfMiscRecord;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MINIDUMP_MODULE_CALLBACK サイズ: 92 バイト(x86)
dim st, 23 ; 4byte整数×23(構造体サイズ 92 / 4 切り上げ)
; FullPath : LPWSTR (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; BaseOfImage : ULONGLONG (+4, 8byte) qpoke st,4,値 / qpeek(st,4) ※IronHSPのみ。3.7/3.8は lpoke st,4,下位 : lpoke st,8,上位
; SizeOfImage : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; CheckSum : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; TimeDateStamp : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; VersionInfo : VS_FIXEDFILEINFO (+24, 52byte) varptr(st)+24 を基点に操作(52byte:入れ子/配列)
; CvRecord : void* (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; SizeOfCvRecord : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; MiscRecord : void* (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; SizeOfMiscRecord : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MINIDUMP_MODULE_CALLBACK サイズ: 104 バイト(x64)
dim st, 26 ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; FullPath : LPWSTR (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; BaseOfImage : ULONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; SizeOfImage : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; CheckSum : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; TimeDateStamp : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; VersionInfo : VS_FIXEDFILEINFO (+28, 52byte) varptr(st)+28 を基点に操作(52byte:入れ子/配列)
; CvRecord : void* (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; SizeOfCvRecord : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; MiscRecord : void* (+92, 8byte) qpoke st,92,値 / qpeek(st,92) ※IronHSPのみ。3.7/3.8は lpoke st,92,下位 : lpoke st,96,上位
; SizeOfMiscRecord : DWORD (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global VS_FIXEDFILEINFO
#field int dwSignature
#field int dwStrucVersion
#field int dwFileVersionMS
#field int dwFileVersionLS
#field int dwProductVersionMS
#field int dwProductVersionLS
#field int dwFileFlagsMask
#field int dwFileFlags
#field int dwFileOS
#field int dwFileType
#field int dwFileSubtype
#field int dwFileDateMS
#field int dwFileDateLS
#endstruct
#defstruct global MINIDUMP_MODULE_CALLBACK, pack=4
#field intptr FullPath
#field int64 BaseOfImage
#field int SizeOfImage
#field int CheckSum
#field int TimeDateStamp
#field VS_FIXEDFILEINFO VersionInfo
#field intptr CvRecord
#field int SizeOfCvRecord
#field intptr MiscRecord
#field int SizeOfMiscRecord
#endstruct
stdim st, MINIDUMP_MODULE_CALLBACK ; NSTRUCT 変数を確保
st->BaseOfImage = 100
mes "BaseOfImage=" + st->BaseOfImage