/* $FreeBSD$ */
/*
PE32+ header file
*/
#ifndef _PE_H
#define _PE_H
//
// File header format.
//
typedef struct _IMAGE_FILE_HEADER {
#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 // File is executable (i.e. no unresolved externel references).
#define IMAGE_FILE_MACHINE_UNKNOWN 0
//
// Directory format.
//
typedef struct _IMAGE_DATA_DIRECTORY {
//
// Optional header format.
//
typedef struct _IMAGE_OPTIONAL_HEADER {
//
// Standard fields.
//
//
// NT additional fields.
//
typedef struct _IMAGE_ROM_OPTIONAL_HEADER {
typedef struct _IMAGE_NT_HEADERS {
typedef struct _IMAGE_ROM_HEADERS {
))
// Subsystem Values
// Directory Entries
//
// Section header format.
//
typedef struct _IMAGE_SECTION_HEADER {
union {
} Misc;
#define IMAGE_SCN_LNK_INFO 0x00000200 // Section contains comments or some other type of information.
//
// Symbol format.
//
//
// Section values.
//
// Symbols have a section number of the section in which they are
// defined. Otherwise, section numbers have the following meanings:
//
//
// Type (fundamental) values.
//
//
// Type (derived) values.
//
//
// Storage classes.
//
#define IMAGE_SYM_CLASS_NULL 0
// new
// type packing constants
// MACROS
//
// Communal selection types.
//
//
// Relocation format.
//
typedef struct _IMAGE_RELOCATION {
//
// I386 relocation types.
//
#define IMAGE_REL_I386_DIR32NB 07 // Direct 32-bit reference to the symbols virtual address, base not included
#define IMAGE_REL_I386_SEG12 011 // Direct 16-bit reference to the segment-selector bits of a 32-bit virtual address
//
// MIPS relocation types.
//
//
// Alpha Relocation types.
//
//
// IBM PowerPC relocation types.
//
#define IMAGE_REL_PPC_TOCREL14 0x0009 // 16-bit offset from TOC base, shifted left 2 (load doubleword)
#define IMAGE_REL_PPC_IMGLUE 0x000E // symbol is glue code; virtual address is TOC restore instruction
// Flag bits in IMAGE_RELOCATION.TYPE
//
// Based relocation format.
//
typedef struct _IMAGE_BASE_RELOCATION {
// UINT16 TypeOffset[1];
//
// Based relocation types.
//
#define IMAGE_REL_BASED_ABSOLUTE 0
//
// Line number format.
//
typedef struct _IMAGE_LINENUMBER {
union {
} Type;
//
// Archive format.
//
typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER {
//
// DLL support.
//
//
// Export Format
//
typedef struct _IMAGE_EXPORT_DIRECTORY {
//
// Import Format
//
typedef struct _IMAGE_IMPORT_BY_NAME {
typedef struct _IMAGE_THUNK_DATA {
union {
} u1;
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
typedef struct {
typedef struct {
//
// Filename of .PDB goes here
//
typedef struct {
//
// Filename of .PDB goes here
//
#endif