Win32 API 日本語リファレンス
ホームSystem.Diagnostics.Debug › IMAGE_DEBUG_INFORMATION

IMAGE_DEBUG_INFORMATION

構造体
サイズx64: 208 バイト / x86: 128 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
ListLIST_ENTRY16/8+0+0デバッグ情報構造体のリンクリストエントリ。
ReservedSizeDWORD4+16+8予約フィールド(サイズ)。使用しない。
ReservedMappedBasevoid*8/4+24+12予約フィールド(マップベース)。使用しない。
ReservedMachineWORD2+32+16予約フィールド(マシン種別)。使用しない。
ReservedCharacteristicsWORD2+34+18予約フィールド(特性)。使用しない。
ReservedCheckSumDWORD4+36+20予約フィールド(チェックサム)。使用しない。
ImageBaseDWORD4+40+24イメージのベースアドレスを示す。
SizeOfImageDWORD4+44+28イメージのバイトサイズを示す。
ReservedNumberOfSectionsDWORD4+48+32予約フィールド(セクション数)。使用しない。
ReservedSectionsIMAGE_SECTION_HEADER*8/4+56+36予約フィールド(セクション配列)。使用しない。
ReservedExportedNamesSizeDWORD4+64+40予約フィールド(エクスポート名サイズ)。使用しない。
ReservedExportedNamesLPSTR8/4+72+44予約フィールド(エクスポート名)。使用しない。
ReservedNumberOfFunctionTableEntriesDWORD4+80+48予約フィールド(関数テーブル数)。使用しない。
ReservedFunctionTableEntriesIMAGE_FUNCTION_ENTRY*8/4+88+52予約フィールド(関数テーブルエントリ)。使用しない。
ReservedLowestFunctionStartingAddressDWORD4+96+56予約フィールド(最小関数開始アドレス)。使用しない。
ReservedHighestFunctionEndingAddressDWORD4+100+60予約フィールド(最大関数終了アドレス)。使用しない。
ReservedNumberOfFpoTableEntriesDWORD4+104+64予約フィールド(FPO テーブル数)。使用しない。
ReservedFpoTableEntriesFPO_DATA*8/4+112+68予約フィールド(FPO テーブルエントリ)。使用しない。
SizeOfCoffSymbolsDWORD4+120+72COFF シンボルテーブルのバイトサイズを示す。
CoffSymbolsIMAGE_COFF_SYMBOLS_HEADER*8/4+128+76COFF シンボルヘッダーを指すポインタ。
ReservedSizeOfCodeViewSymbolsDWORD4+136+80予約フィールド(CodeView シンボルサイズ)。使用しない。
ReservedCodeViewSymbolsvoid*8/4+144+84予約フィールド(CodeView シンボル)。使用しない。
ImageFilePathLPSTR8/4+152+88イメージファイルのパスを示す ANSI 文字列。
ImageFileNameLPSTR8/4+160+92イメージファイル名を示す ANSI 文字列。
ReservedDebugFilePathLPSTR8/4+168+96予約フィールド(デバッグファイルパス)。使用しない。
ReservedTimeDateStampDWORD4+176+100予約フィールド(タイムスタンプ)。使用しない。
ReservedRomImageBOOL4+180+104予約フィールド(ROM イメージ判定)。使用しない。
ReservedDebugDirectoryIMAGE_DEBUG_DIRECTORY*8/4+184+108予約フィールド(デバッグディレクトリ)。使用しない。
ReservedNumberOfDebugDirectoriesDWORD4+192+112予約フィールド(デバッグディレクトリ数)。使用しない。
ReservedOriginalFunctionTableBaseAddressDWORD4+196+116予約フィールド(元関数テーブルベース)。使用しない。
ReservedDWORD8+200+120予約フィールド。使用しない。

各言語での定義

#include <windows.h>

// LIST_ENTRY  (x64 16 / x86 8 バイト)
typedef struct LIST_ENTRY {
    LIST_ENTRY* Flink;
    LIST_ENTRY* Blink;
} LIST_ENTRY;

// IMAGE_DEBUG_INFORMATION  (x64 208 / x86 128 バイト)
typedef struct IMAGE_DEBUG_INFORMATION {
    LIST_ENTRY List;
    DWORD ReservedSize;
    void* ReservedMappedBase;
    WORD ReservedMachine;
    WORD ReservedCharacteristics;
    DWORD ReservedCheckSum;
    DWORD ImageBase;
    DWORD SizeOfImage;
    DWORD ReservedNumberOfSections;
    IMAGE_SECTION_HEADER* ReservedSections;
    DWORD ReservedExportedNamesSize;
    LPSTR ReservedExportedNames;
    DWORD ReservedNumberOfFunctionTableEntries;
    IMAGE_FUNCTION_ENTRY* ReservedFunctionTableEntries;
    DWORD ReservedLowestFunctionStartingAddress;
    DWORD ReservedHighestFunctionEndingAddress;
    DWORD ReservedNumberOfFpoTableEntries;
    FPO_DATA* ReservedFpoTableEntries;
    DWORD SizeOfCoffSymbols;
    IMAGE_COFF_SYMBOLS_HEADER* CoffSymbols;
    DWORD ReservedSizeOfCodeViewSymbols;
    void* ReservedCodeViewSymbols;
    LPSTR ImageFilePath;
    LPSTR ImageFileName;
    LPSTR ReservedDebugFilePath;
    DWORD ReservedTimeDateStamp;
    BOOL ReservedRomImage;
    IMAGE_DEBUG_DIRECTORY* ReservedDebugDirectory;
    DWORD ReservedNumberOfDebugDirectories;
    DWORD ReservedOriginalFunctionTableBaseAddress;
    DWORD Reserved[2];
} IMAGE_DEBUG_INFORMATION;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct LIST_ENTRY
{
    public IntPtr Flink;
    public IntPtr Blink;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IMAGE_DEBUG_INFORMATION
{
    public LIST_ENTRY List;
    public uint ReservedSize;
    public IntPtr ReservedMappedBase;
    public ushort ReservedMachine;
    public ushort ReservedCharacteristics;
    public uint ReservedCheckSum;
    public uint ImageBase;
    public uint SizeOfImage;
    public uint ReservedNumberOfSections;
    public IntPtr ReservedSections;
    public uint ReservedExportedNamesSize;
    public IntPtr ReservedExportedNames;
    public uint ReservedNumberOfFunctionTableEntries;
    public IntPtr ReservedFunctionTableEntries;
    public uint ReservedLowestFunctionStartingAddress;
    public uint ReservedHighestFunctionEndingAddress;
    public uint ReservedNumberOfFpoTableEntries;
    public IntPtr ReservedFpoTableEntries;
    public uint SizeOfCoffSymbols;
    public IntPtr CoffSymbols;
    public uint ReservedSizeOfCodeViewSymbols;
    public IntPtr ReservedCodeViewSymbols;
    public IntPtr ImageFilePath;
    public IntPtr ImageFileName;
    public IntPtr ReservedDebugFilePath;
    public uint ReservedTimeDateStamp;
    [MarshalAs(UnmanagedType.Bool)] public bool ReservedRomImage;
    public IntPtr ReservedDebugDirectory;
    public uint ReservedNumberOfDebugDirectories;
    public uint ReservedOriginalFunctionTableBaseAddress;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public uint[] Reserved;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure LIST_ENTRY
    Public Flink As IntPtr
    Public Blink As IntPtr
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IMAGE_DEBUG_INFORMATION
    Public List As LIST_ENTRY
    Public ReservedSize As UInteger
    Public ReservedMappedBase As IntPtr
    Public ReservedMachine As UShort
    Public ReservedCharacteristics As UShort
    Public ReservedCheckSum As UInteger
    Public ImageBase As UInteger
    Public SizeOfImage As UInteger
    Public ReservedNumberOfSections As UInteger
    Public ReservedSections As IntPtr
    Public ReservedExportedNamesSize As UInteger
    Public ReservedExportedNames As IntPtr
    Public ReservedNumberOfFunctionTableEntries As UInteger
    Public ReservedFunctionTableEntries As IntPtr
    Public ReservedLowestFunctionStartingAddress As UInteger
    Public ReservedHighestFunctionEndingAddress As UInteger
    Public ReservedNumberOfFpoTableEntries As UInteger
    Public ReservedFpoTableEntries As IntPtr
    Public SizeOfCoffSymbols As UInteger
    Public CoffSymbols As IntPtr
    Public ReservedSizeOfCodeViewSymbols As UInteger
    Public ReservedCodeViewSymbols As IntPtr
    Public ImageFilePath As IntPtr
    Public ImageFileName As IntPtr
    Public ReservedDebugFilePath As IntPtr
    Public ReservedTimeDateStamp As UInteger
    <MarshalAs(UnmanagedType.Bool)> Public ReservedRomImage As Boolean
    Public ReservedDebugDirectory As IntPtr
    Public ReservedNumberOfDebugDirectories As UInteger
    Public ReservedOriginalFunctionTableBaseAddress As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public Reserved() As UInteger
End Structure
import ctypes
from ctypes import wintypes

class LIST_ENTRY(ctypes.Structure):
    _fields_ = [
        ("Flink", ctypes.c_void_p),
        ("Blink", ctypes.c_void_p),
    ]

class IMAGE_DEBUG_INFORMATION(ctypes.Structure):
    _fields_ = [
        ("List", LIST_ENTRY),
        ("ReservedSize", wintypes.DWORD),
        ("ReservedMappedBase", ctypes.c_void_p),
        ("ReservedMachine", ctypes.c_ushort),
        ("ReservedCharacteristics", ctypes.c_ushort),
        ("ReservedCheckSum", wintypes.DWORD),
        ("ImageBase", wintypes.DWORD),
        ("SizeOfImage", wintypes.DWORD),
        ("ReservedNumberOfSections", wintypes.DWORD),
        ("ReservedSections", ctypes.c_void_p),
        ("ReservedExportedNamesSize", wintypes.DWORD),
        ("ReservedExportedNames", ctypes.c_void_p),
        ("ReservedNumberOfFunctionTableEntries", wintypes.DWORD),
        ("ReservedFunctionTableEntries", ctypes.c_void_p),
        ("ReservedLowestFunctionStartingAddress", wintypes.DWORD),
        ("ReservedHighestFunctionEndingAddress", wintypes.DWORD),
        ("ReservedNumberOfFpoTableEntries", wintypes.DWORD),
        ("ReservedFpoTableEntries", ctypes.c_void_p),
        ("SizeOfCoffSymbols", wintypes.DWORD),
        ("CoffSymbols", ctypes.c_void_p),
        ("ReservedSizeOfCodeViewSymbols", wintypes.DWORD),
        ("ReservedCodeViewSymbols", ctypes.c_void_p),
        ("ImageFilePath", ctypes.c_void_p),
        ("ImageFileName", ctypes.c_void_p),
        ("ReservedDebugFilePath", ctypes.c_void_p),
        ("ReservedTimeDateStamp", wintypes.DWORD),
        ("ReservedRomImage", wintypes.BOOL),
        ("ReservedDebugDirectory", ctypes.c_void_p),
        ("ReservedNumberOfDebugDirectories", wintypes.DWORD),
        ("ReservedOriginalFunctionTableBaseAddress", wintypes.DWORD),
        ("Reserved", wintypes.DWORD * 2),
    ]
#[repr(C)]
pub struct LIST_ENTRY {
    pub Flink: *mut core::ffi::c_void,
    pub Blink: *mut core::ffi::c_void,
}

#[repr(C)]
pub struct IMAGE_DEBUG_INFORMATION {
    pub List: LIST_ENTRY,
    pub ReservedSize: u32,
    pub ReservedMappedBase: *mut core::ffi::c_void,
    pub ReservedMachine: u16,
    pub ReservedCharacteristics: u16,
    pub ReservedCheckSum: u32,
    pub ImageBase: u32,
    pub SizeOfImage: u32,
    pub ReservedNumberOfSections: u32,
    pub ReservedSections: *mut core::ffi::c_void,
    pub ReservedExportedNamesSize: u32,
    pub ReservedExportedNames: *mut core::ffi::c_void,
    pub ReservedNumberOfFunctionTableEntries: u32,
    pub ReservedFunctionTableEntries: *mut core::ffi::c_void,
    pub ReservedLowestFunctionStartingAddress: u32,
    pub ReservedHighestFunctionEndingAddress: u32,
    pub ReservedNumberOfFpoTableEntries: u32,
    pub ReservedFpoTableEntries: *mut core::ffi::c_void,
    pub SizeOfCoffSymbols: u32,
    pub CoffSymbols: *mut core::ffi::c_void,
    pub ReservedSizeOfCodeViewSymbols: u32,
    pub ReservedCodeViewSymbols: *mut core::ffi::c_void,
    pub ImageFilePath: *mut core::ffi::c_void,
    pub ImageFileName: *mut core::ffi::c_void,
    pub ReservedDebugFilePath: *mut core::ffi::c_void,
    pub ReservedTimeDateStamp: u32,
    pub ReservedRomImage: i32,
    pub ReservedDebugDirectory: *mut core::ffi::c_void,
    pub ReservedNumberOfDebugDirectories: u32,
    pub ReservedOriginalFunctionTableBaseAddress: u32,
    pub Reserved: [u32; 2],
}
import "golang.org/x/sys/windows"

type LIST_ENTRY struct {
	Flink uintptr
	Blink uintptr
}

type IMAGE_DEBUG_INFORMATION struct {
	List LIST_ENTRY
	ReservedSize uint32
	ReservedMappedBase uintptr
	ReservedMachine uint16
	ReservedCharacteristics uint16
	ReservedCheckSum uint32
	ImageBase uint32
	SizeOfImage uint32
	ReservedNumberOfSections uint32
	ReservedSections uintptr
	ReservedExportedNamesSize uint32
	ReservedExportedNames uintptr
	ReservedNumberOfFunctionTableEntries uint32
	ReservedFunctionTableEntries uintptr
	ReservedLowestFunctionStartingAddress uint32
	ReservedHighestFunctionEndingAddress uint32
	ReservedNumberOfFpoTableEntries uint32
	ReservedFpoTableEntries uintptr
	SizeOfCoffSymbols uint32
	CoffSymbols uintptr
	ReservedSizeOfCodeViewSymbols uint32
	ReservedCodeViewSymbols uintptr
	ImageFilePath uintptr
	ImageFileName uintptr
	ReservedDebugFilePath uintptr
	ReservedTimeDateStamp uint32
	ReservedRomImage int32
	ReservedDebugDirectory uintptr
	ReservedNumberOfDebugDirectories uint32
	ReservedOriginalFunctionTableBaseAddress uint32
	Reserved [2]uint32
}
type
  LIST_ENTRY = record
    Flink: Pointer;
    Blink: Pointer;
  end;

  IMAGE_DEBUG_INFORMATION = record
    List: LIST_ENTRY;
    ReservedSize: DWORD;
    ReservedMappedBase: Pointer;
    ReservedMachine: Word;
    ReservedCharacteristics: Word;
    ReservedCheckSum: DWORD;
    ImageBase: DWORD;
    SizeOfImage: DWORD;
    ReservedNumberOfSections: DWORD;
    ReservedSections: Pointer;
    ReservedExportedNamesSize: DWORD;
    ReservedExportedNames: Pointer;
    ReservedNumberOfFunctionTableEntries: DWORD;
    ReservedFunctionTableEntries: Pointer;
    ReservedLowestFunctionStartingAddress: DWORD;
    ReservedHighestFunctionEndingAddress: DWORD;
    ReservedNumberOfFpoTableEntries: DWORD;
    ReservedFpoTableEntries: Pointer;
    SizeOfCoffSymbols: DWORD;
    CoffSymbols: Pointer;
    ReservedSizeOfCodeViewSymbols: DWORD;
    ReservedCodeViewSymbols: Pointer;
    ImageFilePath: Pointer;
    ImageFileName: Pointer;
    ReservedDebugFilePath: Pointer;
    ReservedTimeDateStamp: DWORD;
    ReservedRomImage: BOOL;
    ReservedDebugDirectory: Pointer;
    ReservedNumberOfDebugDirectories: DWORD;
    ReservedOriginalFunctionTableBaseAddress: DWORD;
    Reserved: array[0..1] of DWORD;
  end;
const LIST_ENTRY = extern struct {
    Flink: ?*anyopaque,
    Blink: ?*anyopaque,
};

const IMAGE_DEBUG_INFORMATION = extern struct {
    List: LIST_ENTRY,
    ReservedSize: u32,
    ReservedMappedBase: ?*anyopaque,
    ReservedMachine: u16,
    ReservedCharacteristics: u16,
    ReservedCheckSum: u32,
    ImageBase: u32,
    SizeOfImage: u32,
    ReservedNumberOfSections: u32,
    ReservedSections: ?*anyopaque,
    ReservedExportedNamesSize: u32,
    ReservedExportedNames: ?*anyopaque,
    ReservedNumberOfFunctionTableEntries: u32,
    ReservedFunctionTableEntries: ?*anyopaque,
    ReservedLowestFunctionStartingAddress: u32,
    ReservedHighestFunctionEndingAddress: u32,
    ReservedNumberOfFpoTableEntries: u32,
    ReservedFpoTableEntries: ?*anyopaque,
    SizeOfCoffSymbols: u32,
    CoffSymbols: ?*anyopaque,
    ReservedSizeOfCodeViewSymbols: u32,
    ReservedCodeViewSymbols: ?*anyopaque,
    ImageFilePath: ?*anyopaque,
    ImageFileName: ?*anyopaque,
    ReservedDebugFilePath: ?*anyopaque,
    ReservedTimeDateStamp: u32,
    ReservedRomImage: i32,
    ReservedDebugDirectory: ?*anyopaque,
    ReservedNumberOfDebugDirectories: u32,
    ReservedOriginalFunctionTableBaseAddress: u32,
    Reserved: [2]u32,
};
type
  LIST_ENTRY {.bycopy.} = object
    Flink: pointer
    Blink: pointer

  IMAGE_DEBUG_INFORMATION {.bycopy.} = object
    List: LIST_ENTRY
    ReservedSize: uint32
    ReservedMappedBase: pointer
    ReservedMachine: uint16
    ReservedCharacteristics: uint16
    ReservedCheckSum: uint32
    ImageBase: uint32
    SizeOfImage: uint32
    ReservedNumberOfSections: uint32
    ReservedSections: pointer
    ReservedExportedNamesSize: uint32
    ReservedExportedNames: pointer
    ReservedNumberOfFunctionTableEntries: uint32
    ReservedFunctionTableEntries: pointer
    ReservedLowestFunctionStartingAddress: uint32
    ReservedHighestFunctionEndingAddress: uint32
    ReservedNumberOfFpoTableEntries: uint32
    ReservedFpoTableEntries: pointer
    SizeOfCoffSymbols: uint32
    CoffSymbols: pointer
    ReservedSizeOfCodeViewSymbols: uint32
    ReservedCodeViewSymbols: pointer
    ImageFilePath: pointer
    ImageFileName: pointer
    ReservedDebugFilePath: pointer
    ReservedTimeDateStamp: uint32
    ReservedRomImage: int32
    ReservedDebugDirectory: pointer
    ReservedNumberOfDebugDirectories: uint32
    ReservedOriginalFunctionTableBaseAddress: uint32
    Reserved: array[2, uint32]
struct LIST_ENTRY
{
    void* Flink;
    void* Blink;
}

struct IMAGE_DEBUG_INFORMATION
{
    LIST_ENTRY List;
    uint ReservedSize;
    void* ReservedMappedBase;
    ushort ReservedMachine;
    ushort ReservedCharacteristics;
    uint ReservedCheckSum;
    uint ImageBase;
    uint SizeOfImage;
    uint ReservedNumberOfSections;
    void* ReservedSections;
    uint ReservedExportedNamesSize;
    void* ReservedExportedNames;
    uint ReservedNumberOfFunctionTableEntries;
    void* ReservedFunctionTableEntries;
    uint ReservedLowestFunctionStartingAddress;
    uint ReservedHighestFunctionEndingAddress;
    uint ReservedNumberOfFpoTableEntries;
    void* ReservedFpoTableEntries;
    uint SizeOfCoffSymbols;
    void* CoffSymbols;
    uint ReservedSizeOfCodeViewSymbols;
    void* ReservedCodeViewSymbols;
    void* ImageFilePath;
    void* ImageFileName;
    void* ReservedDebugFilePath;
    uint ReservedTimeDateStamp;
    int ReservedRomImage;
    void* ReservedDebugDirectory;
    uint ReservedNumberOfDebugDirectories;
    uint ReservedOriginalFunctionTableBaseAddress;
    uint[2] Reserved;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; IMAGE_DEBUG_INFORMATION サイズ: 128 バイト(x86)
dim st, 32    ; 4byte整数×32(構造体サイズ 128 / 4 切り上げ)
; List : LIST_ENTRY (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; ReservedSize : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; ReservedMappedBase : void* (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; ReservedMachine : WORD (+16, 2byte)  wpoke st,16,値  /  値 = wpeek(st,16)
; ReservedCharacteristics : WORD (+18, 2byte)  wpoke st,18,値  /  値 = wpeek(st,18)
; ReservedCheckSum : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; ImageBase : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; SizeOfImage : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ReservedNumberOfSections : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ReservedSections : IMAGE_SECTION_HEADER* (+36, 4byte)  varptr(st)+36 を基点に操作(4byte:入れ子/配列)
; ReservedExportedNamesSize : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; ReservedExportedNames : LPSTR (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ReservedNumberOfFunctionTableEntries : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ReservedFunctionTableEntries : IMAGE_FUNCTION_ENTRY* (+52, 4byte)  varptr(st)+52 を基点に操作(4byte:入れ子/配列)
; ReservedLowestFunctionStartingAddress : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ReservedHighestFunctionEndingAddress : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; ReservedNumberOfFpoTableEntries : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; ReservedFpoTableEntries : FPO_DATA* (+68, 4byte)  varptr(st)+68 を基点に操作(4byte:入れ子/配列)
; SizeOfCoffSymbols : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; CoffSymbols : IMAGE_COFF_SYMBOLS_HEADER* (+76, 4byte)  varptr(st)+76 を基点に操作(4byte:入れ子/配列)
; ReservedSizeOfCodeViewSymbols : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; ReservedCodeViewSymbols : void* (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; ImageFilePath : LPSTR (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; ImageFileName : LPSTR (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; ReservedDebugFilePath : LPSTR (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; ReservedTimeDateStamp : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; ReservedRomImage : BOOL (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; ReservedDebugDirectory : IMAGE_DEBUG_DIRECTORY* (+108, 4byte)  varptr(st)+108 を基点に操作(4byte:入れ子/配列)
; ReservedNumberOfDebugDirectories : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; ReservedOriginalFunctionTableBaseAddress : DWORD (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; Reserved : DWORD (+120, 8byte)  varptr(st)+120 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; IMAGE_DEBUG_INFORMATION サイズ: 208 バイト(x64)
dim st, 52    ; 4byte整数×52(構造体サイズ 208 / 4 切り上げ)
; List : LIST_ENTRY (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; ReservedSize : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ReservedMappedBase : void* (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; ReservedMachine : WORD (+32, 2byte)  wpoke st,32,値  /  値 = wpeek(st,32)
; ReservedCharacteristics : WORD (+34, 2byte)  wpoke st,34,値  /  値 = wpeek(st,34)
; ReservedCheckSum : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ImageBase : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; SizeOfImage : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ReservedNumberOfSections : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ReservedSections : IMAGE_SECTION_HEADER* (+56, 8byte)  varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; ReservedExportedNamesSize : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; ReservedExportedNames : LPSTR (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; ReservedNumberOfFunctionTableEntries : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; ReservedFunctionTableEntries : IMAGE_FUNCTION_ENTRY* (+88, 8byte)  varptr(st)+88 を基点に操作(8byte:入れ子/配列)
; ReservedLowestFunctionStartingAddress : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; ReservedHighestFunctionEndingAddress : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; ReservedNumberOfFpoTableEntries : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; ReservedFpoTableEntries : FPO_DATA* (+112, 8byte)  varptr(st)+112 を基点に操作(8byte:入れ子/配列)
; SizeOfCoffSymbols : DWORD (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; CoffSymbols : IMAGE_COFF_SYMBOLS_HEADER* (+128, 8byte)  varptr(st)+128 を基点に操作(8byte:入れ子/配列)
; ReservedSizeOfCodeViewSymbols : DWORD (+136, 4byte)  st.34 = 値  /  値 = st.34   (lpoke/lpeek も可)
; ReservedCodeViewSymbols : void* (+144, 8byte)  qpoke st,144,値 / qpeek(st,144)  ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; ImageFilePath : LPSTR (+152, 8byte)  qpoke st,152,値 / qpeek(st,152)  ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; ImageFileName : LPSTR (+160, 8byte)  qpoke st,160,値 / qpeek(st,160)  ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; ReservedDebugFilePath : LPSTR (+168, 8byte)  qpoke st,168,値 / qpeek(st,168)  ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; ReservedTimeDateStamp : DWORD (+176, 4byte)  st.44 = 値  /  値 = st.44   (lpoke/lpeek も可)
; ReservedRomImage : BOOL (+180, 4byte)  st.45 = 値  /  値 = st.45   (lpoke/lpeek も可)
; ReservedDebugDirectory : IMAGE_DEBUG_DIRECTORY* (+184, 8byte)  varptr(st)+184 を基点に操作(8byte:入れ子/配列)
; ReservedNumberOfDebugDirectories : DWORD (+192, 4byte)  st.48 = 値  /  値 = st.48   (lpoke/lpeek も可)
; ReservedOriginalFunctionTableBaseAddress : DWORD (+196, 4byte)  st.49 = 値  /  値 = st.49   (lpoke/lpeek も可)
; Reserved : DWORD (+200, 8byte)  varptr(st)+200 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global LIST_ENTRY
    #field intptr Flink
    #field intptr Blink
#endstruct

#defstruct global IMAGE_DEBUG_INFORMATION
    #field LIST_ENTRY List
    #field int ReservedSize
    #field intptr ReservedMappedBase
    #field short ReservedMachine
    #field short ReservedCharacteristics
    #field int ReservedCheckSum
    #field int ImageBase
    #field int SizeOfImage
    #field int ReservedNumberOfSections
    #field intptr ReservedSections
    #field int ReservedExportedNamesSize
    #field intptr ReservedExportedNames
    #field int ReservedNumberOfFunctionTableEntries
    #field intptr ReservedFunctionTableEntries
    #field int ReservedLowestFunctionStartingAddress
    #field int ReservedHighestFunctionEndingAddress
    #field int ReservedNumberOfFpoTableEntries
    #field intptr ReservedFpoTableEntries
    #field int SizeOfCoffSymbols
    #field intptr CoffSymbols
    #field int ReservedSizeOfCodeViewSymbols
    #field intptr ReservedCodeViewSymbols
    #field intptr ImageFilePath
    #field intptr ImageFileName
    #field intptr ReservedDebugFilePath
    #field int ReservedTimeDateStamp
    #field bool ReservedRomImage
    #field intptr ReservedDebugDirectory
    #field int ReservedNumberOfDebugDirectories
    #field int ReservedOriginalFunctionTableBaseAddress
    #field int Reserved 2
#endstruct

stdim st, IMAGE_DEBUG_INFORMATION        ; NSTRUCT 変数を確保
st->ReservedSize = 100
mes "ReservedSize=" + st->ReservedSize