ホーム › System.SystemServices › ANON_OBJECT_HEADER_BIGOBJ
ANON_OBJECT_HEADER_BIGOBJ
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Sig1 | WORD | 2 | +0 | +0 | 匿名オブジェクトヘッダーの第1シグネチャ(0)。 |
| Sig2 | WORD | 2 | +2 | +2 | 第2シグネチャ(0xFFFF)。 |
| Version | WORD | 2 | +4 | +4 | ヘッダー形式のバージョン番号(2以上でbigobj)。 |
| Machine | WORD | 2 | +6 | +6 | 対象マシン種別。 |
| TimeDateStamp | DWORD | 4 | +8 | +8 | 作成日時のタイムスタンプ。 |
| ClassID | GUID | 16 | +12 | +12 | bigobjを識別するGUID。 |
| SizeOfData | DWORD | 4 | +28 | +28 | 続くデータのサイズをバイト単位で示す。 |
| Flags | DWORD | 4 | +32 | +32 | オブジェクトの属性フラグ。 |
| MetaDataSize | DWORD | 4 | +36 | +36 | メタデータのサイズをバイト単位で示す。 |
| MetaDataOffset | DWORD | 4 | +40 | +40 | メタデータへのオフセット。 |
| NumberOfSections | DWORD | 4 | +44 | +44 | セクション数。bigobjでは多数のセクションを許容する。 |
| PointerToSymbolTable | DWORD | 4 | +48 | +48 | シンボルテーブルへのファイルポインタ。 |
| NumberOfSymbols | DWORD | 4 | +52 | +52 | シンボルテーブルのエントリ数。 |
各言語での定義
#include <windows.h>
// ANON_OBJECT_HEADER_BIGOBJ (x64 56 / x86 56 バイト)
typedef struct ANON_OBJECT_HEADER_BIGOBJ {
WORD Sig1;
WORD Sig2;
WORD Version;
WORD Machine;
DWORD TimeDateStamp;
GUID ClassID;
DWORD SizeOfData;
DWORD Flags;
DWORD MetaDataSize;
DWORD MetaDataOffset;
DWORD NumberOfSections;
DWORD PointerToSymbolTable;
DWORD NumberOfSymbols;
} ANON_OBJECT_HEADER_BIGOBJ;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ANON_OBJECT_HEADER_BIGOBJ
{
public ushort Sig1;
public ushort Sig2;
public ushort Version;
public ushort Machine;
public uint TimeDateStamp;
public Guid ClassID;
public uint SizeOfData;
public uint Flags;
public uint MetaDataSize;
public uint MetaDataOffset;
public uint NumberOfSections;
public uint PointerToSymbolTable;
public uint NumberOfSymbols;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure ANON_OBJECT_HEADER_BIGOBJ
Public Sig1 As UShort
Public Sig2 As UShort
Public Version As UShort
Public Machine As UShort
Public TimeDateStamp As UInteger
Public ClassID As Guid
Public SizeOfData As UInteger
Public Flags As UInteger
Public MetaDataSize As UInteger
Public MetaDataOffset As UInteger
Public NumberOfSections As UInteger
Public PointerToSymbolTable As UInteger
Public NumberOfSymbols As UInteger
End Structureimport ctypes
from ctypes import wintypes
class ANON_OBJECT_HEADER_BIGOBJ(ctypes.Structure):
_fields_ = [
("Sig1", ctypes.c_ushort),
("Sig2", ctypes.c_ushort),
("Version", ctypes.c_ushort),
("Machine", ctypes.c_ushort),
("TimeDateStamp", wintypes.DWORD),
("ClassID", GUID),
("SizeOfData", wintypes.DWORD),
("Flags", wintypes.DWORD),
("MetaDataSize", wintypes.DWORD),
("MetaDataOffset", wintypes.DWORD),
("NumberOfSections", wintypes.DWORD),
("PointerToSymbolTable", wintypes.DWORD),
("NumberOfSymbols", wintypes.DWORD),
]#[repr(C)]
pub struct ANON_OBJECT_HEADER_BIGOBJ {
pub Sig1: u16,
pub Sig2: u16,
pub Version: u16,
pub Machine: u16,
pub TimeDateStamp: u32,
pub ClassID: GUID,
pub SizeOfData: u32,
pub Flags: u32,
pub MetaDataSize: u32,
pub MetaDataOffset: u32,
pub NumberOfSections: u32,
pub PointerToSymbolTable: u32,
pub NumberOfSymbols: u32,
}import "golang.org/x/sys/windows"
type ANON_OBJECT_HEADER_BIGOBJ struct {
Sig1 uint16
Sig2 uint16
Version uint16
Machine uint16
TimeDateStamp uint32
ClassID windows.GUID
SizeOfData uint32
Flags uint32
MetaDataSize uint32
MetaDataOffset uint32
NumberOfSections uint32
PointerToSymbolTable uint32
NumberOfSymbols uint32
}type
ANON_OBJECT_HEADER_BIGOBJ = record
Sig1: Word;
Sig2: Word;
Version: Word;
Machine: Word;
TimeDateStamp: DWORD;
ClassID: TGUID;
SizeOfData: DWORD;
Flags: DWORD;
MetaDataSize: DWORD;
MetaDataOffset: DWORD;
NumberOfSections: DWORD;
PointerToSymbolTable: DWORD;
NumberOfSymbols: DWORD;
end;const ANON_OBJECT_HEADER_BIGOBJ = extern struct {
Sig1: u16,
Sig2: u16,
Version: u16,
Machine: u16,
TimeDateStamp: u32,
ClassID: GUID,
SizeOfData: u32,
Flags: u32,
MetaDataSize: u32,
MetaDataOffset: u32,
NumberOfSections: u32,
PointerToSymbolTable: u32,
NumberOfSymbols: u32,
};type
ANON_OBJECT_HEADER_BIGOBJ {.bycopy.} = object
Sig1: uint16
Sig2: uint16
Version: uint16
Machine: uint16
TimeDateStamp: uint32
ClassID: GUID
SizeOfData: uint32
Flags: uint32
MetaDataSize: uint32
MetaDataOffset: uint32
NumberOfSections: uint32
PointerToSymbolTable: uint32
NumberOfSymbols: uint32struct ANON_OBJECT_HEADER_BIGOBJ
{
ushort Sig1;
ushort Sig2;
ushort Version;
ushort Machine;
uint TimeDateStamp;
GUID ClassID;
uint SizeOfData;
uint Flags;
uint MetaDataSize;
uint MetaDataOffset;
uint NumberOfSections;
uint PointerToSymbolTable;
uint NumberOfSymbols;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; ANON_OBJECT_HEADER_BIGOBJ サイズ: 56 バイト(x64)
dim st, 14 ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; Sig1 : WORD (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; Sig2 : WORD (+2, 2byte) wpoke st,2,値 / 値 = wpeek(st,2)
; Version : WORD (+4, 2byte) wpoke st,4,値 / 値 = wpeek(st,4)
; Machine : WORD (+6, 2byte) wpoke st,6,値 / 値 = wpeek(st,6)
; TimeDateStamp : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; ClassID : GUID (+12, 16byte) varptr(st)+12 を基点に操作(16byte:入れ子/配列)
; SizeOfData : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; Flags : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; MetaDataSize : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; MetaDataOffset : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; NumberOfSections : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; PointerToSymbolTable : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; NumberOfSymbols : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
#field int Data1
#field short Data2
#field short Data3
#field byte Data4 8
#endstruct
#defstruct global ANON_OBJECT_HEADER_BIGOBJ
#field short Sig1
#field short Sig2
#field short Version
#field short Machine
#field int TimeDateStamp
#field GUID ClassID
#field int SizeOfData
#field int Flags
#field int MetaDataSize
#field int MetaDataOffset
#field int NumberOfSections
#field int PointerToSymbolTable
#field int NumberOfSymbols
#endstruct
stdim st, ANON_OBJECT_HEADER_BIGOBJ ; NSTRUCT 変数を確保
st->Sig1 = 100
mes "Sig1=" + st->Sig1