ホーム › System.SystemServices › IMAGE_EXPORT_DIRECTORY
IMAGE_EXPORT_DIRECTORY
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Characteristics | DWORD | 4 | +0 | +0 | 予約フィールド。現状0。 |
| TimeDateStamp | DWORD | 4 | +4 | +4 | エクスポートデータ作成日時のタイムスタンプ。 |
| MajorVersion | WORD | 2 | +8 | +8 | エクスポートテーブルのメジャーバージョン。 |
| MinorVersion | WORD | 2 | +10 | +10 | エクスポートテーブルのマイナーバージョン。 |
| Name | DWORD | 4 | +12 | +12 | DLL名文字列へのRVA。 |
| Base | DWORD | 4 | +16 | +16 | エクスポート序数の開始番号。 |
| NumberOfFunctions | DWORD | 4 | +20 | +20 | エクスポートアドレステーブルのエントリ数。 |
| NumberOfNames | DWORD | 4 | +24 | +24 | 名前ポインタテーブルのエントリ数。 |
| AddressOfFunctions | DWORD | 4 | +28 | +28 | エクスポート関数アドレステーブルへのRVA。 |
| AddressOfNames | DWORD | 4 | +32 | +32 | エクスポート名ポインタテーブルへのRVA。 |
| AddressOfNameOrdinals | DWORD | 4 | +36 | +36 | 名前序数テーブルへのRVA。 |
各言語での定義
#include <windows.h>
// IMAGE_EXPORT_DIRECTORY (x64 40 / x86 40 バイト)
typedef struct IMAGE_EXPORT_DIRECTORY {
DWORD Characteristics;
DWORD TimeDateStamp;
WORD MajorVersion;
WORD MinorVersion;
DWORD Name;
DWORD Base;
DWORD NumberOfFunctions;
DWORD NumberOfNames;
DWORD AddressOfFunctions;
DWORD AddressOfNames;
DWORD AddressOfNameOrdinals;
} IMAGE_EXPORT_DIRECTORY;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IMAGE_EXPORT_DIRECTORY
{
public uint Characteristics;
public uint TimeDateStamp;
public ushort MajorVersion;
public ushort MinorVersion;
public uint Name;
public uint Base;
public uint NumberOfFunctions;
public uint NumberOfNames;
public uint AddressOfFunctions;
public uint AddressOfNames;
public uint AddressOfNameOrdinals;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IMAGE_EXPORT_DIRECTORY
Public Characteristics As UInteger
Public TimeDateStamp As UInteger
Public MajorVersion As UShort
Public MinorVersion As UShort
Public Name As UInteger
Public Base As UInteger
Public NumberOfFunctions As UInteger
Public NumberOfNames As UInteger
Public AddressOfFunctions As UInteger
Public AddressOfNames As UInteger
Public AddressOfNameOrdinals As UInteger
End Structureimport ctypes
from ctypes import wintypes
class IMAGE_EXPORT_DIRECTORY(ctypes.Structure):
_fields_ = [
("Characteristics", wintypes.DWORD),
("TimeDateStamp", wintypes.DWORD),
("MajorVersion", ctypes.c_ushort),
("MinorVersion", ctypes.c_ushort),
("Name", wintypes.DWORD),
("Base", wintypes.DWORD),
("NumberOfFunctions", wintypes.DWORD),
("NumberOfNames", wintypes.DWORD),
("AddressOfFunctions", wintypes.DWORD),
("AddressOfNames", wintypes.DWORD),
("AddressOfNameOrdinals", wintypes.DWORD),
]#[repr(C)]
pub struct IMAGE_EXPORT_DIRECTORY {
pub Characteristics: u32,
pub TimeDateStamp: u32,
pub MajorVersion: u16,
pub MinorVersion: u16,
pub Name: u32,
pub Base: u32,
pub NumberOfFunctions: u32,
pub NumberOfNames: u32,
pub AddressOfFunctions: u32,
pub AddressOfNames: u32,
pub AddressOfNameOrdinals: u32,
}import "golang.org/x/sys/windows"
type IMAGE_EXPORT_DIRECTORY struct {
Characteristics uint32
TimeDateStamp uint32
MajorVersion uint16
MinorVersion uint16
Name uint32
Base uint32
NumberOfFunctions uint32
NumberOfNames uint32
AddressOfFunctions uint32
AddressOfNames uint32
AddressOfNameOrdinals uint32
}type
IMAGE_EXPORT_DIRECTORY = record
Characteristics: DWORD;
TimeDateStamp: DWORD;
MajorVersion: Word;
MinorVersion: Word;
Name: DWORD;
Base: DWORD;
NumberOfFunctions: DWORD;
NumberOfNames: DWORD;
AddressOfFunctions: DWORD;
AddressOfNames: DWORD;
AddressOfNameOrdinals: DWORD;
end;const IMAGE_EXPORT_DIRECTORY = extern struct {
Characteristics: u32,
TimeDateStamp: u32,
MajorVersion: u16,
MinorVersion: u16,
Name: u32,
Base: u32,
NumberOfFunctions: u32,
NumberOfNames: u32,
AddressOfFunctions: u32,
AddressOfNames: u32,
AddressOfNameOrdinals: u32,
};type
IMAGE_EXPORT_DIRECTORY {.bycopy.} = object
Characteristics: uint32
TimeDateStamp: uint32
MajorVersion: uint16
MinorVersion: uint16
Name: uint32
Base: uint32
NumberOfFunctions: uint32
NumberOfNames: uint32
AddressOfFunctions: uint32
AddressOfNames: uint32
AddressOfNameOrdinals: uint32struct IMAGE_EXPORT_DIRECTORY
{
uint Characteristics;
uint TimeDateStamp;
ushort MajorVersion;
ushort MinorVersion;
uint Name;
uint Base;
uint NumberOfFunctions;
uint NumberOfNames;
uint AddressOfFunctions;
uint AddressOfNames;
uint AddressOfNameOrdinals;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; IMAGE_EXPORT_DIRECTORY サイズ: 40 バイト(x64)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; Characteristics : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; TimeDateStamp : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; MajorVersion : WORD (+8, 2byte) wpoke st,8,値 / 値 = wpeek(st,8)
; MinorVersion : WORD (+10, 2byte) wpoke st,10,値 / 値 = wpeek(st,10)
; Name : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; Base : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; NumberOfFunctions : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; NumberOfNames : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; AddressOfFunctions : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; AddressOfNames : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; AddressOfNameOrdinals : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global IMAGE_EXPORT_DIRECTORY
#field int Characteristics
#field int TimeDateStamp
#field short MajorVersion
#field short MinorVersion
#field int Name
#field int Base
#field int NumberOfFunctions
#field int NumberOfNames
#field int AddressOfFunctions
#field int AddressOfNames
#field int AddressOfNameOrdinals
#endstruct
stdim st, IMAGE_EXPORT_DIRECTORY ; NSTRUCT 変数を確保
st->Characteristics = 100
mes "Characteristics=" + st->Characteristics