ホーム › System.Diagnostics.Debug › IMAGE_DEBUG_INFORMATION
IMAGE_DEBUG_INFORMATION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| List | LIST_ENTRY | 16/8 | +0 | +0 | デバッグ情報構造体のリンクリストエントリ。 |
| ReservedSize | DWORD | 4 | +16 | +8 | 予約フィールド(サイズ)。使用しない。 |
| ReservedMappedBase | void* | 8/4 | +24 | +12 | 予約フィールド(マップベース)。使用しない。 |
| ReservedMachine | WORD | 2 | +32 | +16 | 予約フィールド(マシン種別)。使用しない。 |
| ReservedCharacteristics | WORD | 2 | +34 | +18 | 予約フィールド(特性)。使用しない。 |
| ReservedCheckSum | DWORD | 4 | +36 | +20 | 予約フィールド(チェックサム)。使用しない。 |
| ImageBase | DWORD | 4 | +40 | +24 | イメージのベースアドレスを示す。 |
| SizeOfImage | DWORD | 4 | +44 | +28 | イメージのバイトサイズを示す。 |
| ReservedNumberOfSections | DWORD | 4 | +48 | +32 | 予約フィールド(セクション数)。使用しない。 |
| ReservedSections | IMAGE_SECTION_HEADER* | 8/4 | +56 | +36 | 予約フィールド(セクション配列)。使用しない。 |
| ReservedExportedNamesSize | DWORD | 4 | +64 | +40 | 予約フィールド(エクスポート名サイズ)。使用しない。 |
| ReservedExportedNames | LPSTR | 8/4 | +72 | +44 | 予約フィールド(エクスポート名)。使用しない。 |
| ReservedNumberOfFunctionTableEntries | DWORD | 4 | +80 | +48 | 予約フィールド(関数テーブル数)。使用しない。 |
| ReservedFunctionTableEntries | IMAGE_FUNCTION_ENTRY* | 8/4 | +88 | +52 | 予約フィールド(関数テーブルエントリ)。使用しない。 |
| ReservedLowestFunctionStartingAddress | DWORD | 4 | +96 | +56 | 予約フィールド(最小関数開始アドレス)。使用しない。 |
| ReservedHighestFunctionEndingAddress | DWORD | 4 | +100 | +60 | 予約フィールド(最大関数終了アドレス)。使用しない。 |
| ReservedNumberOfFpoTableEntries | DWORD | 4 | +104 | +64 | 予約フィールド(FPO テーブル数)。使用しない。 |
| ReservedFpoTableEntries | FPO_DATA* | 8/4 | +112 | +68 | 予約フィールド(FPO テーブルエントリ)。使用しない。 |
| SizeOfCoffSymbols | DWORD | 4 | +120 | +72 | COFF シンボルテーブルのバイトサイズを示す。 |
| CoffSymbols | IMAGE_COFF_SYMBOLS_HEADER* | 8/4 | +128 | +76 | COFF シンボルヘッダーを指すポインタ。 |
| ReservedSizeOfCodeViewSymbols | DWORD | 4 | +136 | +80 | 予約フィールド(CodeView シンボルサイズ)。使用しない。 |
| ReservedCodeViewSymbols | void* | 8/4 | +144 | +84 | 予約フィールド(CodeView シンボル)。使用しない。 |
| ImageFilePath | LPSTR | 8/4 | +152 | +88 | イメージファイルのパスを示す ANSI 文字列。 |
| ImageFileName | LPSTR | 8/4 | +160 | +92 | イメージファイル名を示す ANSI 文字列。 |
| ReservedDebugFilePath | LPSTR | 8/4 | +168 | +96 | 予約フィールド(デバッグファイルパス)。使用しない。 |
| ReservedTimeDateStamp | DWORD | 4 | +176 | +100 | 予約フィールド(タイムスタンプ)。使用しない。 |
| ReservedRomImage | BOOL | 4 | +180 | +104 | 予約フィールド(ROM イメージ判定)。使用しない。 |
| ReservedDebugDirectory | IMAGE_DEBUG_DIRECTORY* | 8/4 | +184 | +108 | 予約フィールド(デバッグディレクトリ)。使用しない。 |
| ReservedNumberOfDebugDirectories | DWORD | 4 | +192 | +112 | 予約フィールド(デバッグディレクトリ数)。使用しない。 |
| ReservedOriginalFunctionTableBaseAddress | DWORD | 4 | +196 | +116 | 予約フィールド(元関数テーブルベース)。使用しない。 |
| Reserved | DWORD | 8 | +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 Structureimport 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