ホーム › System.SystemServices › IMAGE_VXD_HEADER
IMAGE_VXD_HEADER
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| e32_magic | WORD | 2 | +0 | +0 | LE/LXヘッダーのマジック値。 |
| e32_border | BYTE | 1 | +2 | +2 | バイトオーダー(0でリトルエンディアン)。 |
| e32_worder | BYTE | 1 | +3 | +3 | ワードオーダー(0でリトルエンディアン)。 |
| e32_level | DWORD | 4 | +4 | +4 | リンカフォーマットレベル。 |
| e32_cpu | WORD | 2 | +8 | +8 | 対象CPU種別。 |
| e32_os | WORD | 2 | +10 | +10 | 対象OS種別。 |
| e32_ver | DWORD | 4 | +12 | +12 | モジュールバージョン。 |
| e32_mflags | DWORD | 4 | +16 | +16 | モジュールフラグ。 |
| e32_mpages | DWORD | 4 | +20 | +20 | モジュール内の物理ページ数。 |
| e32_startobj | DWORD | 4 | +24 | +24 | エントリポイントを含むオブジェクト番号。 |
| e32_eip | DWORD | 4 | +28 | +28 | エントリポイントのEIPオフセット。 |
| e32_stackobj | DWORD | 4 | +32 | +32 | スタックを含むオブジェクト番号。 |
| e32_esp | DWORD | 4 | +36 | +36 | 初期ESP値。 |
| e32_pagesize | DWORD | 4 | +40 | +40 | ページサイズ。 |
| e32_lastpagesize | DWORD | 4 | +44 | +44 | 最終ページのサイズ。 |
| e32_fixupsize | DWORD | 4 | +48 | +48 | フィックスアップ情報のサイズ。 |
| e32_fixupsum | DWORD | 4 | +52 | +52 | フィックスアップ情報のチェックサム。 |
| e32_ldrsize | DWORD | 4 | +56 | +56 | ローダーセクションのサイズ。 |
| e32_ldrsum | DWORD | 4 | +60 | +60 | ローダーセクションのチェックサム。 |
| e32_objtab | DWORD | 4 | +64 | +64 | オブジェクトテーブルのオフセット。 |
| e32_objcnt | DWORD | 4 | +68 | +68 | オブジェクトテーブルのエントリ数。 |
| e32_objmap | DWORD | 4 | +72 | +72 | オブジェクトページマップのオフセット。 |
| e32_itermap | DWORD | 4 | +76 | +76 | オブジェクト反復データマップのオフセット。 |
| e32_rsrctab | DWORD | 4 | +80 | +80 | リソーステーブルのオフセット。 |
| e32_rsrccnt | DWORD | 4 | +84 | +84 | リソーステーブルのエントリ数。 |
| e32_restab | DWORD | 4 | +88 | +88 | 常駐名テーブルのオフセット。 |
| e32_enttab | DWORD | 4 | +92 | +92 | エントリテーブルのオフセット。 |
| e32_dirtab | DWORD | 4 | +96 | +96 | モジュールディレクティブテーブルのオフセット。 |
| e32_dircnt | DWORD | 4 | +100 | +100 | モジュールディレクティブのエントリ数。 |
| e32_fpagetab | DWORD | 4 | +104 | +104 | ページごとのフィックスアップテーブルのオフセット。 |
| e32_frectab | DWORD | 4 | +108 | +108 | フィックスアップレコードテーブルのオフセット。 |
| e32_impmod | DWORD | 4 | +112 | +112 | インポートモジュール名テーブルのオフセット。 |
| e32_impmodcnt | DWORD | 4 | +116 | +116 | インポートモジュール名テーブルのエントリ数。 |
| e32_impproc | DWORD | 4 | +120 | +120 | インポート関数名テーブルのオフセット。 |
| e32_pagesum | DWORD | 4 | +124 | +124 | ページごとのチェックサムテーブルのオフセット。 |
| e32_datapage | DWORD | 4 | +128 | +128 | 列挙データページのオフセット。 |
| e32_preload | DWORD | 4 | +132 | +132 | プリロードするページ数。 |
| e32_nrestab | DWORD | 4 | +136 | +136 | 非常駐名テーブルのファイルオフセット。 |
| e32_cbnrestab | DWORD | 4 | +140 | +140 | 非常駐名テーブルのサイズ。 |
| e32_nressum | DWORD | 4 | +144 | +144 | 非常駐名テーブルのチェックサム。 |
| e32_autodata | DWORD | 4 | +148 | +148 | 自動データセグメントのオブジェクト番号。 |
| e32_debuginfo | DWORD | 4 | +152 | +152 | デバッグ情報のオフセット。 |
| e32_debuglen | DWORD | 4 | +156 | +156 | デバッグ情報の長さ。 |
| e32_instpreload | DWORD | 4 | +160 | +160 | プリロードページ内のインスタンスページ数。 |
| e32_instdemand | DWORD | 4 | +164 | +164 | デマンドロードページ内のインスタンスページ数。 |
| e32_heapsize | DWORD | 4 | +168 | +168 | 16ビットアプリ用ヒープサイズ。 |
| e32_res3 | BYTE | 12 | +172 | +172 | 予約バイト配列。 |
| e32_winresoff | DWORD | 4 | +184 | +184 | Windowsリソースのオフセット。 |
| e32_winreslen | DWORD | 4 | +188 | +188 | Windowsリソースの長さ。 |
| e32_devid | WORD | 2 | +192 | +192 | デバイスID。 |
| e32_ddkver | WORD | 2 | +194 | +194 | DDKバージョン。 |
各言語での定義
#include <windows.h>
// IMAGE_VXD_HEADER (x64 196 / x86 196 バイト)
#pragma pack(push, 2)
typedef struct IMAGE_VXD_HEADER {
WORD e32_magic;
BYTE e32_border;
BYTE e32_worder;
DWORD e32_level;
WORD e32_cpu;
WORD e32_os;
DWORD e32_ver;
DWORD e32_mflags;
DWORD e32_mpages;
DWORD e32_startobj;
DWORD e32_eip;
DWORD e32_stackobj;
DWORD e32_esp;
DWORD e32_pagesize;
DWORD e32_lastpagesize;
DWORD e32_fixupsize;
DWORD e32_fixupsum;
DWORD e32_ldrsize;
DWORD e32_ldrsum;
DWORD e32_objtab;
DWORD e32_objcnt;
DWORD e32_objmap;
DWORD e32_itermap;
DWORD e32_rsrctab;
DWORD e32_rsrccnt;
DWORD e32_restab;
DWORD e32_enttab;
DWORD e32_dirtab;
DWORD e32_dircnt;
DWORD e32_fpagetab;
DWORD e32_frectab;
DWORD e32_impmod;
DWORD e32_impmodcnt;
DWORD e32_impproc;
DWORD e32_pagesum;
DWORD e32_datapage;
DWORD e32_preload;
DWORD e32_nrestab;
DWORD e32_cbnrestab;
DWORD e32_nressum;
DWORD e32_autodata;
DWORD e32_debuginfo;
DWORD e32_debuglen;
DWORD e32_instpreload;
DWORD e32_instdemand;
DWORD e32_heapsize;
BYTE e32_res3[12];
DWORD e32_winresoff;
DWORD e32_winreslen;
WORD e32_devid;
WORD e32_ddkver;
} IMAGE_VXD_HEADER;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 2, CharSet = CharSet.Unicode)]
public struct IMAGE_VXD_HEADER
{
public ushort e32_magic;
public byte e32_border;
public byte e32_worder;
public uint e32_level;
public ushort e32_cpu;
public ushort e32_os;
public uint e32_ver;
public uint e32_mflags;
public uint e32_mpages;
public uint e32_startobj;
public uint e32_eip;
public uint e32_stackobj;
public uint e32_esp;
public uint e32_pagesize;
public uint e32_lastpagesize;
public uint e32_fixupsize;
public uint e32_fixupsum;
public uint e32_ldrsize;
public uint e32_ldrsum;
public uint e32_objtab;
public uint e32_objcnt;
public uint e32_objmap;
public uint e32_itermap;
public uint e32_rsrctab;
public uint e32_rsrccnt;
public uint e32_restab;
public uint e32_enttab;
public uint e32_dirtab;
public uint e32_dircnt;
public uint e32_fpagetab;
public uint e32_frectab;
public uint e32_impmod;
public uint e32_impmodcnt;
public uint e32_impproc;
public uint e32_pagesum;
public uint e32_datapage;
public uint e32_preload;
public uint e32_nrestab;
public uint e32_cbnrestab;
public uint e32_nressum;
public uint e32_autodata;
public uint e32_debuginfo;
public uint e32_debuglen;
public uint e32_instpreload;
public uint e32_instdemand;
public uint e32_heapsize;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] e32_res3;
public uint e32_winresoff;
public uint e32_winreslen;
public ushort e32_devid;
public ushort e32_ddkver;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=2, CharSet:=CharSet.Unicode)>
Public Structure IMAGE_VXD_HEADER
Public e32_magic As UShort
Public e32_border As Byte
Public e32_worder As Byte
Public e32_level As UInteger
Public e32_cpu As UShort
Public e32_os As UShort
Public e32_ver As UInteger
Public e32_mflags As UInteger
Public e32_mpages As UInteger
Public e32_startobj As UInteger
Public e32_eip As UInteger
Public e32_stackobj As UInteger
Public e32_esp As UInteger
Public e32_pagesize As UInteger
Public e32_lastpagesize As UInteger
Public e32_fixupsize As UInteger
Public e32_fixupsum As UInteger
Public e32_ldrsize As UInteger
Public e32_ldrsum As UInteger
Public e32_objtab As UInteger
Public e32_objcnt As UInteger
Public e32_objmap As UInteger
Public e32_itermap As UInteger
Public e32_rsrctab As UInteger
Public e32_rsrccnt As UInteger
Public e32_restab As UInteger
Public e32_enttab As UInteger
Public e32_dirtab As UInteger
Public e32_dircnt As UInteger
Public e32_fpagetab As UInteger
Public e32_frectab As UInteger
Public e32_impmod As UInteger
Public e32_impmodcnt As UInteger
Public e32_impproc As UInteger
Public e32_pagesum As UInteger
Public e32_datapage As UInteger
Public e32_preload As UInteger
Public e32_nrestab As UInteger
Public e32_cbnrestab As UInteger
Public e32_nressum As UInteger
Public e32_autodata As UInteger
Public e32_debuginfo As UInteger
Public e32_debuglen As UInteger
Public e32_instpreload As UInteger
Public e32_instdemand As UInteger
Public e32_heapsize As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=12)> Public e32_res3() As Byte
Public e32_winresoff As UInteger
Public e32_winreslen As UInteger
Public e32_devid As UShort
Public e32_ddkver As UShort
End Structureimport ctypes
from ctypes import wintypes
class IMAGE_VXD_HEADER(ctypes.Structure):
_pack_ = 2
_fields_ = [
("e32_magic", ctypes.c_ushort),
("e32_border", ctypes.c_ubyte),
("e32_worder", ctypes.c_ubyte),
("e32_level", wintypes.DWORD),
("e32_cpu", ctypes.c_ushort),
("e32_os", ctypes.c_ushort),
("e32_ver", wintypes.DWORD),
("e32_mflags", wintypes.DWORD),
("e32_mpages", wintypes.DWORD),
("e32_startobj", wintypes.DWORD),
("e32_eip", wintypes.DWORD),
("e32_stackobj", wintypes.DWORD),
("e32_esp", wintypes.DWORD),
("e32_pagesize", wintypes.DWORD),
("e32_lastpagesize", wintypes.DWORD),
("e32_fixupsize", wintypes.DWORD),
("e32_fixupsum", wintypes.DWORD),
("e32_ldrsize", wintypes.DWORD),
("e32_ldrsum", wintypes.DWORD),
("e32_objtab", wintypes.DWORD),
("e32_objcnt", wintypes.DWORD),
("e32_objmap", wintypes.DWORD),
("e32_itermap", wintypes.DWORD),
("e32_rsrctab", wintypes.DWORD),
("e32_rsrccnt", wintypes.DWORD),
("e32_restab", wintypes.DWORD),
("e32_enttab", wintypes.DWORD),
("e32_dirtab", wintypes.DWORD),
("e32_dircnt", wintypes.DWORD),
("e32_fpagetab", wintypes.DWORD),
("e32_frectab", wintypes.DWORD),
("e32_impmod", wintypes.DWORD),
("e32_impmodcnt", wintypes.DWORD),
("e32_impproc", wintypes.DWORD),
("e32_pagesum", wintypes.DWORD),
("e32_datapage", wintypes.DWORD),
("e32_preload", wintypes.DWORD),
("e32_nrestab", wintypes.DWORD),
("e32_cbnrestab", wintypes.DWORD),
("e32_nressum", wintypes.DWORD),
("e32_autodata", wintypes.DWORD),
("e32_debuginfo", wintypes.DWORD),
("e32_debuglen", wintypes.DWORD),
("e32_instpreload", wintypes.DWORD),
("e32_instdemand", wintypes.DWORD),
("e32_heapsize", wintypes.DWORD),
("e32_res3", ctypes.c_ubyte * 12),
("e32_winresoff", wintypes.DWORD),
("e32_winreslen", wintypes.DWORD),
("e32_devid", ctypes.c_ushort),
("e32_ddkver", ctypes.c_ushort),
]#[repr(C, packed(2))]
pub struct IMAGE_VXD_HEADER {
pub e32_magic: u16,
pub e32_border: u8,
pub e32_worder: u8,
pub e32_level: u32,
pub e32_cpu: u16,
pub e32_os: u16,
pub e32_ver: u32,
pub e32_mflags: u32,
pub e32_mpages: u32,
pub e32_startobj: u32,
pub e32_eip: u32,
pub e32_stackobj: u32,
pub e32_esp: u32,
pub e32_pagesize: u32,
pub e32_lastpagesize: u32,
pub e32_fixupsize: u32,
pub e32_fixupsum: u32,
pub e32_ldrsize: u32,
pub e32_ldrsum: u32,
pub e32_objtab: u32,
pub e32_objcnt: u32,
pub e32_objmap: u32,
pub e32_itermap: u32,
pub e32_rsrctab: u32,
pub e32_rsrccnt: u32,
pub e32_restab: u32,
pub e32_enttab: u32,
pub e32_dirtab: u32,
pub e32_dircnt: u32,
pub e32_fpagetab: u32,
pub e32_frectab: u32,
pub e32_impmod: u32,
pub e32_impmodcnt: u32,
pub e32_impproc: u32,
pub e32_pagesum: u32,
pub e32_datapage: u32,
pub e32_preload: u32,
pub e32_nrestab: u32,
pub e32_cbnrestab: u32,
pub e32_nressum: u32,
pub e32_autodata: u32,
pub e32_debuginfo: u32,
pub e32_debuglen: u32,
pub e32_instpreload: u32,
pub e32_instdemand: u32,
pub e32_heapsize: u32,
pub e32_res3: [u8; 12],
pub e32_winresoff: u32,
pub e32_winreslen: u32,
pub e32_devid: u16,
pub e32_ddkver: u16,
}import "golang.org/x/sys/windows"
type IMAGE_VXD_HEADER struct {
e32_magic uint16
e32_border byte
e32_worder byte
e32_level uint32
e32_cpu uint16
e32_os uint16
e32_ver uint32
e32_mflags uint32
e32_mpages uint32
e32_startobj uint32
e32_eip uint32
e32_stackobj uint32
e32_esp uint32
e32_pagesize uint32
e32_lastpagesize uint32
e32_fixupsize uint32
e32_fixupsum uint32
e32_ldrsize uint32
e32_ldrsum uint32
e32_objtab uint32
e32_objcnt uint32
e32_objmap uint32
e32_itermap uint32
e32_rsrctab uint32
e32_rsrccnt uint32
e32_restab uint32
e32_enttab uint32
e32_dirtab uint32
e32_dircnt uint32
e32_fpagetab uint32
e32_frectab uint32
e32_impmod uint32
e32_impmodcnt uint32
e32_impproc uint32
e32_pagesum uint32
e32_datapage uint32
e32_preload uint32
e32_nrestab uint32
e32_cbnrestab uint32
e32_nressum uint32
e32_autodata uint32
e32_debuginfo uint32
e32_debuglen uint32
e32_instpreload uint32
e32_instdemand uint32
e32_heapsize uint32
e32_res3 [12]byte
e32_winresoff uint32
e32_winreslen uint32
e32_devid uint16
e32_ddkver uint16
}type
IMAGE_VXD_HEADER = packed record
e32_magic: Word;
e32_border: Byte;
e32_worder: Byte;
e32_level: DWORD;
e32_cpu: Word;
e32_os: Word;
e32_ver: DWORD;
e32_mflags: DWORD;
e32_mpages: DWORD;
e32_startobj: DWORD;
e32_eip: DWORD;
e32_stackobj: DWORD;
e32_esp: DWORD;
e32_pagesize: DWORD;
e32_lastpagesize: DWORD;
e32_fixupsize: DWORD;
e32_fixupsum: DWORD;
e32_ldrsize: DWORD;
e32_ldrsum: DWORD;
e32_objtab: DWORD;
e32_objcnt: DWORD;
e32_objmap: DWORD;
e32_itermap: DWORD;
e32_rsrctab: DWORD;
e32_rsrccnt: DWORD;
e32_restab: DWORD;
e32_enttab: DWORD;
e32_dirtab: DWORD;
e32_dircnt: DWORD;
e32_fpagetab: DWORD;
e32_frectab: DWORD;
e32_impmod: DWORD;
e32_impmodcnt: DWORD;
e32_impproc: DWORD;
e32_pagesum: DWORD;
e32_datapage: DWORD;
e32_preload: DWORD;
e32_nrestab: DWORD;
e32_cbnrestab: DWORD;
e32_nressum: DWORD;
e32_autodata: DWORD;
e32_debuginfo: DWORD;
e32_debuglen: DWORD;
e32_instpreload: DWORD;
e32_instdemand: DWORD;
e32_heapsize: DWORD;
e32_res3: array[0..11] of Byte;
e32_winresoff: DWORD;
e32_winreslen: DWORD;
e32_devid: Word;
e32_ddkver: Word;
end;const IMAGE_VXD_HEADER = extern struct {
e32_magic: u16,
e32_border: u8,
e32_worder: u8,
e32_level: u32,
e32_cpu: u16,
e32_os: u16,
e32_ver: u32,
e32_mflags: u32,
e32_mpages: u32,
e32_startobj: u32,
e32_eip: u32,
e32_stackobj: u32,
e32_esp: u32,
e32_pagesize: u32,
e32_lastpagesize: u32,
e32_fixupsize: u32,
e32_fixupsum: u32,
e32_ldrsize: u32,
e32_ldrsum: u32,
e32_objtab: u32,
e32_objcnt: u32,
e32_objmap: u32,
e32_itermap: u32,
e32_rsrctab: u32,
e32_rsrccnt: u32,
e32_restab: u32,
e32_enttab: u32,
e32_dirtab: u32,
e32_dircnt: u32,
e32_fpagetab: u32,
e32_frectab: u32,
e32_impmod: u32,
e32_impmodcnt: u32,
e32_impproc: u32,
e32_pagesum: u32,
e32_datapage: u32,
e32_preload: u32,
e32_nrestab: u32,
e32_cbnrestab: u32,
e32_nressum: u32,
e32_autodata: u32,
e32_debuginfo: u32,
e32_debuglen: u32,
e32_instpreload: u32,
e32_instdemand: u32,
e32_heapsize: u32,
e32_res3: [12]u8,
e32_winresoff: u32,
e32_winreslen: u32,
e32_devid: u16,
e32_ddkver: u16,
};type
IMAGE_VXD_HEADER {.packed.} = object
e32_magic: uint16
e32_border: uint8
e32_worder: uint8
e32_level: uint32
e32_cpu: uint16
e32_os: uint16
e32_ver: uint32
e32_mflags: uint32
e32_mpages: uint32
e32_startobj: uint32
e32_eip: uint32
e32_stackobj: uint32
e32_esp: uint32
e32_pagesize: uint32
e32_lastpagesize: uint32
e32_fixupsize: uint32
e32_fixupsum: uint32
e32_ldrsize: uint32
e32_ldrsum: uint32
e32_objtab: uint32
e32_objcnt: uint32
e32_objmap: uint32
e32_itermap: uint32
e32_rsrctab: uint32
e32_rsrccnt: uint32
e32_restab: uint32
e32_enttab: uint32
e32_dirtab: uint32
e32_dircnt: uint32
e32_fpagetab: uint32
e32_frectab: uint32
e32_impmod: uint32
e32_impmodcnt: uint32
e32_impproc: uint32
e32_pagesum: uint32
e32_datapage: uint32
e32_preload: uint32
e32_nrestab: uint32
e32_cbnrestab: uint32
e32_nressum: uint32
e32_autodata: uint32
e32_debuginfo: uint32
e32_debuglen: uint32
e32_instpreload: uint32
e32_instdemand: uint32
e32_heapsize: uint32
e32_res3: array[12, uint8]
e32_winresoff: uint32
e32_winreslen: uint32
e32_devid: uint16
e32_ddkver: uint16align(2)
struct IMAGE_VXD_HEADER
{
ushort e32_magic;
ubyte e32_border;
ubyte e32_worder;
uint e32_level;
ushort e32_cpu;
ushort e32_os;
uint e32_ver;
uint e32_mflags;
uint e32_mpages;
uint e32_startobj;
uint e32_eip;
uint e32_stackobj;
uint e32_esp;
uint e32_pagesize;
uint e32_lastpagesize;
uint e32_fixupsize;
uint e32_fixupsum;
uint e32_ldrsize;
uint e32_ldrsum;
uint e32_objtab;
uint e32_objcnt;
uint e32_objmap;
uint e32_itermap;
uint e32_rsrctab;
uint e32_rsrccnt;
uint e32_restab;
uint e32_enttab;
uint e32_dirtab;
uint e32_dircnt;
uint e32_fpagetab;
uint e32_frectab;
uint e32_impmod;
uint e32_impmodcnt;
uint e32_impproc;
uint e32_pagesum;
uint e32_datapage;
uint e32_preload;
uint e32_nrestab;
uint e32_cbnrestab;
uint e32_nressum;
uint e32_autodata;
uint e32_debuginfo;
uint e32_debuglen;
uint e32_instpreload;
uint e32_instdemand;
uint e32_heapsize;
ubyte[12] e32_res3;
uint e32_winresoff;
uint e32_winreslen;
ushort e32_devid;
ushort e32_ddkver;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; IMAGE_VXD_HEADER サイズ: 196 バイト(x64)
dim st, 49 ; 4byte整数×49(構造体サイズ 196 / 4 切り上げ)
; e32_magic : WORD (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; e32_border : BYTE (+2, 1byte) poke st,2,値 / 値 = peek(st,2)
; e32_worder : BYTE (+3, 1byte) poke st,3,値 / 値 = peek(st,3)
; e32_level : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; e32_cpu : WORD (+8, 2byte) wpoke st,8,値 / 値 = wpeek(st,8)
; e32_os : WORD (+10, 2byte) wpoke st,10,値 / 値 = wpeek(st,10)
; e32_ver : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; e32_mflags : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; e32_mpages : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; e32_startobj : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; e32_eip : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; e32_stackobj : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; e32_esp : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; e32_pagesize : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; e32_lastpagesize : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; e32_fixupsize : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; e32_fixupsum : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; e32_ldrsize : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; e32_ldrsum : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; e32_objtab : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; e32_objcnt : DWORD (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; e32_objmap : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; e32_itermap : DWORD (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; e32_rsrctab : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; e32_rsrccnt : DWORD (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; e32_restab : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; e32_enttab : DWORD (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; e32_dirtab : DWORD (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; e32_dircnt : DWORD (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; e32_fpagetab : DWORD (+104, 4byte) st.26 = 値 / 値 = st.26 (lpoke/lpeek も可)
; e32_frectab : DWORD (+108, 4byte) st.27 = 値 / 値 = st.27 (lpoke/lpeek も可)
; e32_impmod : DWORD (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; e32_impmodcnt : DWORD (+116, 4byte) st.29 = 値 / 値 = st.29 (lpoke/lpeek も可)
; e32_impproc : DWORD (+120, 4byte) st.30 = 値 / 値 = st.30 (lpoke/lpeek も可)
; e32_pagesum : DWORD (+124, 4byte) st.31 = 値 / 値 = st.31 (lpoke/lpeek も可)
; e32_datapage : DWORD (+128, 4byte) st.32 = 値 / 値 = st.32 (lpoke/lpeek も可)
; e32_preload : DWORD (+132, 4byte) st.33 = 値 / 値 = st.33 (lpoke/lpeek も可)
; e32_nrestab : DWORD (+136, 4byte) st.34 = 値 / 値 = st.34 (lpoke/lpeek も可)
; e32_cbnrestab : DWORD (+140, 4byte) st.35 = 値 / 値 = st.35 (lpoke/lpeek も可)
; e32_nressum : DWORD (+144, 4byte) st.36 = 値 / 値 = st.36 (lpoke/lpeek も可)
; e32_autodata : DWORD (+148, 4byte) st.37 = 値 / 値 = st.37 (lpoke/lpeek も可)
; e32_debuginfo : DWORD (+152, 4byte) st.38 = 値 / 値 = st.38 (lpoke/lpeek も可)
; e32_debuglen : DWORD (+156, 4byte) st.39 = 値 / 値 = st.39 (lpoke/lpeek も可)
; e32_instpreload : DWORD (+160, 4byte) st.40 = 値 / 値 = st.40 (lpoke/lpeek も可)
; e32_instdemand : DWORD (+164, 4byte) st.41 = 値 / 値 = st.41 (lpoke/lpeek も可)
; e32_heapsize : DWORD (+168, 4byte) st.42 = 値 / 値 = st.42 (lpoke/lpeek も可)
; e32_res3 : BYTE (+172, 12byte) varptr(st)+172 を基点に操作(12byte:入れ子/配列)
; e32_winresoff : DWORD (+184, 4byte) st.46 = 値 / 値 = st.46 (lpoke/lpeek も可)
; e32_winreslen : DWORD (+188, 4byte) st.47 = 値 / 値 = st.47 (lpoke/lpeek も可)
; e32_devid : WORD (+192, 2byte) wpoke st,192,値 / 値 = wpeek(st,192)
; e32_ddkver : WORD (+194, 2byte) wpoke st,194,値 / 値 = wpeek(st,194)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global IMAGE_VXD_HEADER, pack=2
#field short e32_magic
#field byte e32_border
#field byte e32_worder
#field int e32_level
#field short e32_cpu
#field short e32_os
#field int e32_ver
#field int e32_mflags
#field int e32_mpages
#field int e32_startobj
#field int e32_eip
#field int e32_stackobj
#field int e32_esp
#field int e32_pagesize
#field int e32_lastpagesize
#field int e32_fixupsize
#field int e32_fixupsum
#field int e32_ldrsize
#field int e32_ldrsum
#field int e32_objtab
#field int e32_objcnt
#field int e32_objmap
#field int e32_itermap
#field int e32_rsrctab
#field int e32_rsrccnt
#field int e32_restab
#field int e32_enttab
#field int e32_dirtab
#field int e32_dircnt
#field int e32_fpagetab
#field int e32_frectab
#field int e32_impmod
#field int e32_impmodcnt
#field int e32_impproc
#field int e32_pagesum
#field int e32_datapage
#field int e32_preload
#field int e32_nrestab
#field int e32_cbnrestab
#field int e32_nressum
#field int e32_autodata
#field int e32_debuginfo
#field int e32_debuglen
#field int e32_instpreload
#field int e32_instdemand
#field int e32_heapsize
#field byte e32_res3 12
#field int e32_winresoff
#field int e32_winreslen
#field short e32_devid
#field short e32_ddkver
#endstruct
stdim st, IMAGE_VXD_HEADER ; NSTRUCT 変数を確保
st->e32_magic = 100
mes "e32_magic=" + st->e32_magic