📄 pe_linker.h
字号:
/* * This file is an excerpt of winnt.h from WINE, which bears the * following copyright: * * Win32 definitions for Windows NT * * Copyright 1996 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *//* * File formats definitions */typedef struct _IMAGE_DOS_HEADER { WORD e_magic; /* 00: MZ Header signature */ WORD e_cblp; /* 02: Bytes on last page of file */ WORD e_cp; /* 04: Pages in file */ WORD e_crlc; /* 06: Relocations */ WORD e_cparhdr; /* 08: Size of header in paragraphs */ WORD e_minalloc; /* 0a: Minimum extra paragraphs needed */ WORD e_maxalloc; /* 0c: Maximum extra paragraphs needed */ WORD e_ss; /* 0e: Initial (relative) SS value */ WORD e_sp; /* 10: Initial SP value */ WORD e_csum; /* 12: Checksum */ WORD e_ip; /* 14: Initial IP value */ WORD e_cs; /* 16: Initial (relative) CS value */ WORD e_lfarlc; /* 18: File address of relocation table */ WORD e_ovno; /* 1a: Overlay number */ WORD e_res[4]; /* 1c: Reserved words */ WORD e_oemid; /* 24: OEM identifier (for e_oeminfo) */ WORD e_oeminfo; /* 26: OEM information; e_oemid specific */ WORD e_res2[10]; /* 28: Reserved words */ DWORD e_lfanew; /* 3c: Offset to extended header */} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;#define IMAGE_DOS_SIGNATURE 0x5A4D /* MZ */#define IMAGE_OS2_SIGNATURE 0x454E /* NE */#define IMAGE_OS2_SIGNATURE_LE 0x454C /* LE */#define IMAGE_OS2_SIGNATURE_LX 0x584C /* LX */#define IMAGE_VXD_SIGNATURE 0x454C /* LE */#define IMAGE_NT_SIGNATURE 0x00004550 /* PE00 *//* * This is the Windows executable (NE) header. * the name IMAGE_OS2_HEADER is misleading, but in the SDK this way. */typedef struct{ WORD ne_magic; /* 00 NE signature 'NE' */ BYTE ne_ver; /* 02 Linker version number */ BYTE ne_rev; /* 03 Linker revision number */ WORD ne_enttab; /* 04 Offset to entry table relative to NE */ WORD ne_cbenttab; /* 06 Length of entry table in bytes */ LONG ne_crc; /* 08 Checksum */ WORD ne_flags; /* 0c Flags about segments in this file */ WORD ne_autodata; /* 0e Automatic data segment number */ WORD ne_heap; /* 10 Initial size of local heap */ WORD ne_stack; /* 12 Initial size of stack */ DWORD ne_csip; /* 14 Initial CS:IP */ DWORD ne_sssp; /* 18 Initial SS:SP */ WORD ne_cseg; /* 1c # of entries in segment table */ WORD ne_cmod; /* 1e # of entries in module reference tab. */ WORD ne_cbnrestab; /* 20 Length of nonresident-name table */ WORD ne_segtab; /* 22 Offset to segment table */ WORD ne_rsrctab; /* 24 Offset to resource table */ WORD ne_restab; /* 26 Offset to resident-name table */ WORD ne_modtab; /* 28 Offset to module reference table */ WORD ne_imptab; /* 2a Offset to imported name table */ DWORD ne_nrestab; /* 2c Offset to nonresident-name table */ WORD ne_cmovent; /* 30 # of movable entry points */ WORD ne_align; /* 32 Logical sector alignment shift count */ WORD ne_cres; /* 34 # of resource segments */ BYTE ne_exetyp; /* 36 Flags indicating target OS */ BYTE ne_flagsothers; /* 37 Additional information flags */ WORD ne_pretthunks; /* 38 Offset to return thunks */ WORD ne_psegrefbytes; /* 3a Offset to segment ref. bytes */ WORD ne_swaparea; /* 3c Reserved by Microsoft */ WORD ne_expver; /* 3e Expected Windows version number */} IMAGE_OS2_HEADER, *PIMAGE_OS2_HEADER;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, *PIMAGE_VXD_HEADER;/* These defines describe the meanings of the bits in the Characteristics field */#define IMAGE_FILE_RELOCS_STRIPPED 0x0001 /* No relocation info */#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008#define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020#define IMAGE_FILE_16BIT_MACHINE 0x0040#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080#define IMAGE_FILE_32BIT_MACHINE 0x0100#define IMAGE_FILE_DEBUG_STRIPPED 0x0200#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800#define IMAGE_FILE_SYSTEM 0x1000#define IMAGE_FILE_DLL 0x2000#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000/* These are the settings of the Machine field. */#define IMAGE_FILE_MACHINE_UNKNOWN 0#define IMAGE_FILE_MACHINE_I860 0x014d#define IMAGE_FILE_MACHINE_I386 0x014c#define IMAGE_FILE_MACHINE_R3000 0x0162#define IMAGE_FILE_MACHINE_R4000 0x0166#define IMAGE_FILE_MACHINE_R10000 0x0168#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169#define IMAGE_FILE_MACHINE_ALPHA 0x0184#define IMAGE_FILE_MACHINE_SH3 0x01a2#define IMAGE_FILE_MACHINE_SH3DSP 0x01a3#define IMAGE_FILE_MACHINE_SH3E 0x01a4#define IMAGE_FILE_MACHINE_SH4 0x01a6#define IMAGE_FILE_MACHINE_SH5 0x01a8#define IMAGE_FILE_MACHINE_ARM 0x01c0#define IMAGE_FILE_MACHINE_THUMB 0x01c2#define IMAGE_FILE_MACHINE_AM33 0x01d3#define IMAGE_FILE_MACHINE_POWERPC 0x01f0#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1#define IMAGE_FILE_MACHINE_IA64 0x0200#define IMAGE_FILE_MACHINE_MIPS16 0x0266#define IMAGE_FILE_MACHINE_ALPHA64 0x0284#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64#define IMAGE_FILE_MACHINE_TRICORE 0x0520#define IMAGE_FILE_MACHINE_CEF 0x0cef#define IMAGE_FILE_MACHINE_EBC 0x0ebc#define IMAGE_FILE_MACHINE_AMD64 0x8664#define IMAGE_FILE_MACHINE_M32R 0x9041#define IMAGE_FILE_MACHINE_CEE 0xc0ee#define IMAGE_SIZEOF_FILE_HEADER 20#define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56#define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER32 224#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER64 240#define IMAGE_SIZEOF_SHORT_NAME 8#define IMAGE_SIZEOF_SECTION_HEADER 40#define IMAGE_SIZEOF_SYMBOL 18#define IMAGE_SIZEOF_AUX_SYMBOL 18#define IMAGE_SIZEOF_RELOCATION 10#define IMAGE_SIZEOF_BASE_RELOCATION 8#define IMAGE_SIZEOF_LINENUMBER 6#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60/* Possible Magic values */#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x010b#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x020b#define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x0107#ifdef CONFIG_X86_64#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL_HEADER64#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC#else#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL_HEADER32#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC#endif/* These are indexes into the DataDirectory array */#define IMAGE_FILE_EXPORT_DIRECTORY 0#define IMAGE_FILE_IMPORT_DIRECTORY 1#define IMAGE_FILE_RESOURCE_DIRECTORY 2#define IMAGE_FILE_EXCEPTION_DIRECTORY 3#define IMAGE_FILE_SECURITY_DIRECTORY 4#define IMAGE_FILE_BASE_RELOCATION_TABLE 5#define IMAGE_FILE_DEBUG_DIRECTORY 6#define IMAGE_FILE_DESCRIPTION_STRING 7#define IMAGE_FILE_MACHINE_VALUE 8 /* Mips */#define IMAGE_FILE_THREAD_LOCAL_STORAGE 9#define IMAGE_FILE_CALLBACK_DIRECTORY 10/* Directory Entries, indices into the DataDirectory array */#define IMAGE_DIRECTORY_ENTRY_EXPORT 0#define IMAGE_DIRECTORY_ENTRY_IMPORT 1#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3#define IMAGE_DIRECTORY_ENTRY_SECURITY 4#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5#define IMAGE_DIRECTORY_ENTRY_DEBUG 6#define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 /* (MIPS GP) */#define IMAGE_DIRECTORY_ENTRY_TLS 9#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11#define IMAGE_DIRECTORY_ENTRY_IAT 12 /* Import Address Table */#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14/* Subsystem Values */#define IMAGE_SUBSYSTEM_UNKNOWN 0#define IMAGE_SUBSYSTEM_NATIVE 1#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 /* Windows GUI subsystem */#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 /* Windows character subsystem */#define IMAGE_SUBSYSTEM_OS2_CUI 5#define IMAGE_SUBSYSTEM_POSIX_CUI 7#define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 /* native Win9x driver */#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 /* Windows CE subsystem */#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12#define IMAGE_SUBSYSTEM_EFI_ROM 13#define IMAGE_SUBSYSTEM_XBOX 14typedef struct _IMAGE_FILE_HEADER { WORD Machine; WORD NumberOfSections; DWORD TimeDateStamp; DWORD PointerToSymbolTable; DWORD NumberOfSymbols; WORD SizeOfOptionalHeader; WORD Characteristics;} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; DWORD Size;} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16typedef struct _IMAGE_OPTIONAL_HEADER32 { /* Standard fields */ WORD Magic; BYTE MajorLinkerVersion; BYTE MinorLinkerVersion; DWORD SizeOfCode; DWORD SizeOfInitializedData; DWORD SizeOfUninitializedData; DWORD AddressOfEntryPoint; DWORD BaseOfCode; DWORD BaseOfData; /* NT additional fields */ DWORD ImageBase; DWORD SectionAlignment; DWORD FileAlignment; WORD MajorOperatingSystemVersion; WORD MinorOperatingSystemVersion; WORD MajorImageVersion; WORD MinorImageVersion; WORD MajorSubsystemVersion; WORD MinorSubsystemVersion; DWORD Win32VersionValue; DWORD SizeOfImage; DWORD SizeOfHeaders; DWORD CheckSum; WORD Subsystem; WORD DllCharacteristics; DWORD SizeOfStackReserve; DWORD SizeOfStackCommit; DWORD SizeOfHeapReserve; DWORD SizeOfHeapCommit; DWORD LoaderFlags; DWORD NumberOfRvaAndSizes; IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;typedef struct _IMAGE_OPTIONAL_HEADER64 { /* Standard fields */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -