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

IMAGE_SECTION_HEADER

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

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

フィールド

フィールドサイズx64x86説明
NameBYTE8+0+08 バイトの null 埋めされた UTF-8 文字列です。文字列がちょうど 8 文字の場合、終端の null 文字はありません。それより長い名前の場合、このメンバーにはスラッシュ (/) に続いて、文字列テーブルへのオフセットを表す 10 進数の ASCII 表現が格納されます。実行可能イメージは文字列テーブルを使用せず、8 文字を超えるセクション名をサポートしません。
Misc_Misc_e__Union4+8+8物理アドレスまたは仮想サイズを格納する共用体。
VirtualAddressDWORD4+12+12メモリに読み込まれたときの、イメージベースからの相対的なセクションの先頭バイトのアドレスです。オブジェクトファイルの場合、これは再配置が適用される前の先頭バイトのアドレスです。
SizeOfRawDataDWORD4+16+16ディスク上の初期化済みデータのサイズ (バイト単位) です。この値は IMAGE_OPTIONAL_HEADER 構造体の FileAlignment メンバーの倍数でなければなりません。この値が VirtualSize メンバーより小さい場合、セクションの残りの部分は 0 で埋められます。セクションが初期化されていないデータのみを含む場合、このメンバーは 0 です。
PointerToRawDataDWORD4+20+20COFF ファイル内の最初のページを指すファイルポインターです。この値は IMAGE_OPTIONAL_HEADER 構造体の FileAlignment メンバーの倍数でなければなりません。セクションが初期化されていないデータのみを含む場合、このメンバーは 0 に設定します。
PointerToRelocationsDWORD4+24+24セクションの再配置エントリの先頭を指すファイルポインターです。再配置が存在しない場合、この値は 0 です。
PointerToLinenumbersDWORD4+28+28セクションの行番号エントリの先頭を指すファイルポインターです。COFF 行番号が存在しない場合、この値は 0 です。
NumberOfRelocationsWORD2+32+32セクションの再配置エントリの数です。実行可能イメージの場合、この値は 0 です。
NumberOfLinenumbersWORD2+34+34セクションの行番号エントリの数です。
CharacteristicsIMAGE_SECTION_CHARACTERISTICS4+36+36

イメージの特性です。次の値が定義されています。

フラグ 意味
0x00000000
予約済みです。
0x00000001
予約済みです。
0x00000002
予約済みです。
0x00000004
予約済みです。
IMAGE_SCN_TYPE_NO_PAD
0x00000008
セクションを次の境界までパディングしません。このフラグは廃止されており、IMAGE_SCN_ALIGN_1BYTES に置き換えられています。
0x00000010
予約済みです。
IMAGE_SCN_CNT_CODE
0x00000020
セクションには実行可能コードが含まれます。
IMAGE_SCN_CNT_INITIALIZED_DATA
0x00000040
セクションには初期化済みデータが含まれます。
IMAGE_SCN_CNT_UNINITIALIZED_DATA
0x00000080
セクションには初期化されていないデータが含まれます。
IMAGE_SCN_LNK_OTHER
0x00000100
予約済みです。
IMAGE_SCN_LNK_INFO
0x00000200
セクションにはコメントまたはその他の情報が含まれます。これはオブジェクトファイルでのみ有効です。
0x00000400
予約済みです。
IMAGE_SCN_LNK_REMOVE
0x00000800
セクションはイメージの一部になりません。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_LNK_COMDAT
0x00001000
セクションには COMDAT データが含まれます。これはオブジェクトファイルでのみ有効です。
0x00002000
予約済みです。
IMAGE_SCN_NO_DEFER_SPEC_EXC
0x00004000
このセクションに対応する TLB エントリの投機的例外処理ビットをリセットします。
IMAGE_SCN_GPREL
0x00008000
セクションにはグローバルポインター経由で参照されるデータが含まれます。
0x00010000
予約済みです。
IMAGE_SCN_MEM_PURGEABLE
0x00020000
予約済みです。
IMAGE_SCN_MEM_LOCKED
0x00040000
予約済みです。
IMAGE_SCN_MEM_PRELOAD
0x00080000
予約済みです。
IMAGE_SCN_ALIGN_1BYTES
0x00100000
データを 1 バイト境界に配置します。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_ALIGN_2BYTES
0x00200000
データを 2 バイト境界に配置します。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_ALIGN_4BYTES
0x00300000
データを 4 バイト境界に配置します。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_ALIGN_8BYTES
0x00400000
データを 8 バイト境界に配置します。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_ALIGN_16BYTES
0x00500000
データを 16 バイト境界に配置します。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_ALIGN_32BYTES
0x00600000
データを 32 バイト境界に配置します。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_ALIGN_64BYTES
0x00700000
データを 64 バイト境界に配置します。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_ALIGN_128BYTES
0x00800000
データを 128 バイト境界に配置します。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_ALIGN_256BYTES
0x00900000
データを 256 バイト境界に配置します。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_ALIGN_512BYTES
0x00A00000
データを 512 バイト境界に配置します。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_ALIGN_1024BYTES
0x00B00000
データを 1024 バイト境界に配置します。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_ALIGN_2048BYTES
0x00C00000
データを 2048 バイト境界に配置します。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_ALIGN_4096BYTES
0x00D00000
データを 4096 バイト境界に配置します。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_ALIGN_8192BYTES
0x00E00000
データを 8192 バイト境界に配置します。これはオブジェクトファイルでのみ有効です。
IMAGE_SCN_LNK_NRELOC_OVFL
0x01000000
セクションには拡張再配置が含まれます。セクションの再配置の数が、セクションヘッダー内でそのために予約されている 16 ビットを超えています。セクションヘッダーの NumberOfRelocations フィールドが 0xffff の場合、実際の再配置数は最初の再配置の VirtualAddress フィールドに格納されます。IMAGE_SCN_LNK_NRELOC_OVFL が設定されているにもかかわらず、セクション内の再配置が 0xffff 未満である場合はエラーです。
IMAGE_SCN_MEM_DISCARDABLE
0x02000000
セクションは必要に応じて破棄できます。
IMAGE_SCN_MEM_NOT_CACHED
0x04000000
セクションはキャッシュできません。
IMAGE_SCN_MEM_NOT_PAGED
0x08000000
セクションはページングできません。
IMAGE_SCN_MEM_SHARED
0x10000000
セクションはメモリ内で共有できます。
IMAGE_SCN_MEM_EXECUTE
0x20000000
セクションはコードとして実行できます。
IMAGE_SCN_MEM_READ
0x40000000
セクションは読み取り可能です。
IMAGE_SCN_MEM_WRITE
0x80000000
セクションは書き込み可能です。

共用体: _Misc_e__Union x64 4B / x86 4B

フィールドサイズx64x86説明
PhysicalAddressDWORD4+0+0ファイルアドレスです。
VirtualSizeDWORD4+0+0メモリに読み込まれたときのセクションの合計サイズ (バイト単位) です。この値が SizeOfRawData メンバーより大きい場合、セクションは 0 で埋められます。このフィールドは実行可能イメージでのみ有効であり、オブジェクトファイルでは 0 に設定してください。

公式ドキュメント

イメージセクションヘッダーの形式を表します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// IMAGE_SECTION_HEADER  (x64 40 / x86 40 バイト)
typedef struct IMAGE_SECTION_HEADER {
    BYTE Name[8];
    _Misc_e__Union Misc;
    DWORD VirtualAddress;
    DWORD SizeOfRawData;
    DWORD PointerToRawData;
    DWORD PointerToRelocations;
    DWORD PointerToLinenumbers;
    WORD NumberOfRelocations;
    WORD NumberOfLinenumbers;
    IMAGE_SECTION_CHARACTERISTICS Characteristics;
} IMAGE_SECTION_HEADER;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IMAGE_SECTION_HEADER
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] Name;
    public _Misc_e__Union Misc;
    public uint VirtualAddress;
    public uint SizeOfRawData;
    public uint PointerToRawData;
    public uint PointerToRelocations;
    public uint PointerToLinenumbers;
    public ushort NumberOfRelocations;
    public ushort NumberOfLinenumbers;
    public uint Characteristics;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IMAGE_SECTION_HEADER
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public Name() As Byte
    Public Misc As _Misc_e__Union
    Public VirtualAddress As UInteger
    Public SizeOfRawData As UInteger
    Public PointerToRawData As UInteger
    Public PointerToRelocations As UInteger
    Public PointerToLinenumbers As UInteger
    Public NumberOfRelocations As UShort
    Public NumberOfLinenumbers As UShort
    Public Characteristics As UInteger
End Structure
import ctypes
from ctypes import wintypes

class IMAGE_SECTION_HEADER(ctypes.Structure):
    _fields_ = [
        ("Name", ctypes.c_ubyte * 8),
        ("Misc", _Misc_e__Union),
        ("VirtualAddress", wintypes.DWORD),
        ("SizeOfRawData", wintypes.DWORD),
        ("PointerToRawData", wintypes.DWORD),
        ("PointerToRelocations", wintypes.DWORD),
        ("PointerToLinenumbers", wintypes.DWORD),
        ("NumberOfRelocations", ctypes.c_ushort),
        ("NumberOfLinenumbers", ctypes.c_ushort),
        ("Characteristics", wintypes.DWORD),
    ]
#[repr(C)]
pub struct IMAGE_SECTION_HEADER {
    pub Name: [u8; 8],
    pub Misc: _Misc_e__Union,
    pub VirtualAddress: u32,
    pub SizeOfRawData: u32,
    pub PointerToRawData: u32,
    pub PointerToRelocations: u32,
    pub PointerToLinenumbers: u32,
    pub NumberOfRelocations: u16,
    pub NumberOfLinenumbers: u16,
    pub Characteristics: u32,
}
import "golang.org/x/sys/windows"

type IMAGE_SECTION_HEADER struct {
	Name [8]byte
	Misc _Misc_e__Union
	VirtualAddress uint32
	SizeOfRawData uint32
	PointerToRawData uint32
	PointerToRelocations uint32
	PointerToLinenumbers uint32
	NumberOfRelocations uint16
	NumberOfLinenumbers uint16
	Characteristics uint32
}
type
  IMAGE_SECTION_HEADER = record
    Name: array[0..7] of Byte;
    Misc: _Misc_e__Union;
    VirtualAddress: DWORD;
    SizeOfRawData: DWORD;
    PointerToRawData: DWORD;
    PointerToRelocations: DWORD;
    PointerToLinenumbers: DWORD;
    NumberOfRelocations: Word;
    NumberOfLinenumbers: Word;
    Characteristics: DWORD;
  end;
const IMAGE_SECTION_HEADER = extern struct {
    Name: [8]u8,
    Misc: _Misc_e__Union,
    VirtualAddress: u32,
    SizeOfRawData: u32,
    PointerToRawData: u32,
    PointerToRelocations: u32,
    PointerToLinenumbers: u32,
    NumberOfRelocations: u16,
    NumberOfLinenumbers: u16,
    Characteristics: u32,
};
type
  IMAGE_SECTION_HEADER {.bycopy.} = object
    Name: array[8, uint8]
    Misc: _Misc_e__Union
    VirtualAddress: uint32
    SizeOfRawData: uint32
    PointerToRawData: uint32
    PointerToRelocations: uint32
    PointerToLinenumbers: uint32
    NumberOfRelocations: uint16
    NumberOfLinenumbers: uint16
    Characteristics: uint32
struct IMAGE_SECTION_HEADER
{
    ubyte[8] Name;
    _Misc_e__Union Misc;
    uint VirtualAddress;
    uint SizeOfRawData;
    uint PointerToRawData;
    uint PointerToRelocations;
    uint PointerToLinenumbers;
    ushort NumberOfRelocations;
    ushort NumberOfLinenumbers;
    uint Characteristics;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; IMAGE_SECTION_HEADER サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; Name : BYTE (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; Misc : _Misc_e__Union (+8, 4byte)  varptr(st)+8 を基点に操作(4byte:入れ子/配列)
; VirtualAddress : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; SizeOfRawData : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; PointerToRawData : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; PointerToRelocations : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; PointerToLinenumbers : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; NumberOfRelocations : WORD (+32, 2byte)  wpoke st,32,値  /  値 = wpeek(st,32)
; NumberOfLinenumbers : WORD (+34, 2byte)  wpoke st,34,値  /  値 = wpeek(st,34)
; Characteristics : IMAGE_SECTION_CHARACTERISTICS (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global IMAGE_SECTION_HEADER
    #field byte Name 8
    #field byte Misc 4
    #field int VirtualAddress
    #field int SizeOfRawData
    #field int PointerToRawData
    #field int PointerToRelocations
    #field int PointerToLinenumbers
    #field short NumberOfRelocations
    #field short NumberOfLinenumbers
    #field int Characteristics
#endstruct

stdim st, IMAGE_SECTION_HEADER        ; NSTRUCT 変数を確保
st->VirtualAddress = 100
mes "VirtualAddress=" + st->VirtualAddress
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。