📄 pe_linker.h
字号:
/* Import thunk */typedef struct _IMAGE_THUNK_DATA32 { union { DWORD ForwarderString; DWORD Function; DWORD Ordinal; DWORD AddressOfData; } u1;} IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32;typedef struct _IMAGE_THUNK_DATA64 { union { ULONGLONG ForwarderString; ULONGLONG Function; ULONGLONG Ordinal; ULONGLONG AddressOfData; } u1;} IMAGE_THUNK_DATA64,*PIMAGE_THUNK_DATA64;#ifdef CONFIG_X86_64typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA;typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA;#elsetypedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA;typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA;#endif/* Import module directory */typedef struct packed _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; /* 0 for terminating null * import descriptor */ DWORD OriginalFirstThunk; /* RVA to original unbound * IAT */ } u; DWORD TimeDateStamp; /* 0 if not bound, * -1 if bound, and real date\time stamp * in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT * (new BIND) * otherwise date/time stamp of DLL bound to * (Old BIND) */ DWORD ForwarderChain; /* -1 if no forwarders */ DWORD Name; /* RVA to IAT (if bound this IAT has actual addresses) */ DWORD FirstThunk;} IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;#define IMAGE_ORDINAL_FLAG32 0x80000000#define IMAGE_ORDINAL_FLAG64 0x8000000000000000#define IMAGE_SNAP_BY_ORDINAL32(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG32) != 0)#define IMAGE_SNAP_BY_ORDINAL64(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG64) != 0)#define IMAGE_ORDINAL(Ordinal) (Ordinal & 0xffff)#ifdef CONFIG_X86_64#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64#define IMAGE_SNAP_BY_ORDINAL IMAGE_SNAP_BY_ORDINAL64#else#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32#define IMAGE_SNAP_BY_ORDINAL IMAGE_SNAP_BY_ORDINAL32#endiftypedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR{ DWORD TimeDateStamp; WORD OffsetModuleName; WORD NumberOfModuleForwarderRefs;/* Array of zero or more IMAGE_BOUND_FORWARDER_REF follows */} IMAGE_BOUND_IMPORT_DESCRIPTOR, *PIMAGE_BOUND_IMPORT_DESCRIPTOR;typedef struct _IMAGE_BOUND_FORWARDER_REF{ DWORD TimeDateStamp; WORD OffsetModuleName; WORD Reserved;} IMAGE_BOUND_FORWARDER_REF, *PIMAGE_BOUND_FORWARDER_REF;typedef struct _IMAGE_BASE_RELOCATION{ DWORD VirtualAddress; DWORD SizeOfBlock; WORD TypeOffset[0];} IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;typedef struct _IMAGE_RELOCATION{ union { DWORD VirtualAddress; DWORD RelocCount; } DUMMYUNIONNAME; DWORD SymbolTableIndex; WORD Type;} IMAGE_RELOCATION, *PIMAGE_RELOCATION;#define IMAGE_SIZEOF_RELOCATION 10/* generic relocation types */#define IMAGE_REL_BASED_ABSOLUTE 0#define IMAGE_REL_BASED_HIGH 1#define IMAGE_REL_BASED_LOW 2#define IMAGE_REL_BASED_HIGHLOW 3#define IMAGE_REL_BASED_HIGHADJ 4#define IMAGE_REL_BASED_MIPS_JMPADDR 5#define IMAGE_REL_BASED_SECTION 6#define IMAGE_REL_BASED_REL 7#define IMAGE_REL_BASED_MIPS_JMPADDR16 9#define IMAGE_REL_BASED_IA64_IMM64 9 /* yes, 9 too */#define IMAGE_REL_BASED_DIR64 10#define IMAGE_REL_BASED_HIGH3ADJ 11/* I386 relocation types */#define IMAGE_REL_I386_ABSOLUTE 0#define IMAGE_REL_I386_DIR16 1#define IMAGE_REL_I386_REL16 2#define IMAGE_REL_I386_DIR32 6#define IMAGE_REL_I386_DIR32NB 7#define IMAGE_REL_I386_SEG12 9#define IMAGE_REL_I386_SECTION 10#define IMAGE_REL_I386_SECREL 11#define IMAGE_REL_I386_REL32 20/* MIPS relocation types */#define IMAGE_REL_MIPS_ABSOLUTE 0x0000#define IMAGE_REL_MIPS_REFHALF 0x0001#define IMAGE_REL_MIPS_REFWORD 0x0002#define IMAGE_REL_MIPS_JMPADDR 0x0003#define IMAGE_REL_MIPS_REFHI 0x0004#define IMAGE_REL_MIPS_REFLO 0x0005#define IMAGE_REL_MIPS_GPREL 0x0006#define IMAGE_REL_MIPS_LITERAL 0x0007#define IMAGE_REL_MIPS_SECTION 0x000A#define IMAGE_REL_MIPS_SECREL 0x000B#define IMAGE_REL_MIPS_SECRELLO 0x000C#define IMAGE_REL_MIPS_SECRELHI 0x000D#define IMAGE_REL_MIPS_JMPADDR16 0x0010#define IMAGE_REL_MIPS_REFWORDNB 0x0022#define IMAGE_REL_MIPS_PAIR 0x0025/* ALPHA relocation types */#define IMAGE_REL_ALPHA_ABSOLUTE 0x0000#define IMAGE_REL_ALPHA_REFLONG 0x0001#define IMAGE_REL_ALPHA_REFQUAD 0x0002#define IMAGE_REL_ALPHA_GPREL 0x0003#define IMAGE_REL_ALPHA_LITERAL 0x0004#define IMAGE_REL_ALPHA_LITUSE 0x0005#define IMAGE_REL_ALPHA_GPDISP 0x0006#define IMAGE_REL_ALPHA_BRADDR 0x0007#define IMAGE_REL_ALPHA_HINT 0x0008#define IMAGE_REL_ALPHA_INLINE_REFLONG 0x0009#define IMAGE_REL_ALPHA_REFHI 0x000A#define IMAGE_REL_ALPHA_REFLO 0x000B#define IMAGE_REL_ALPHA_PAIR 0x000C#define IMAGE_REL_ALPHA_MATCH 0x000D#define IMAGE_REL_ALPHA_SECTION 0x000E#define IMAGE_REL_ALPHA_SECREL 0x000F#define IMAGE_REL_ALPHA_REFLONGNB 0x0010#define IMAGE_REL_ALPHA_SECRELLO 0x0011#define IMAGE_REL_ALPHA_SECRELHI 0x0012#define IMAGE_REL_ALPHA_REFQ3 0x0013#define IMAGE_REL_ALPHA_REFQ2 0x0014#define IMAGE_REL_ALPHA_REFQ1 0x0015#define IMAGE_REL_ALPHA_GPRELLO 0x0016#define IMAGE_REL_ALPHA_GPRELHI 0x0017/* PowerPC relocation types */#define IMAGE_REL_PPC_ABSOLUTE 0x0000#define IMAGE_REL_PPC_ADDR64 0x0001#define IMAGE_REL_PPC_ADDR 0x0002#define IMAGE_REL_PPC_ADDR24 0x0003#define IMAGE_REL_PPC_ADDR16 0x0004#define IMAGE_REL_PPC_ADDR14 0x0005#define IMAGE_REL_PPC_REL24 0x0006#define IMAGE_REL_PPC_REL14 0x0007#define IMAGE_REL_PPC_TOCREL16 0x0008#define IMAGE_REL_PPC_TOCREL14 0x0009#define IMAGE_REL_PPC_ADDR32NB 0x000A#define IMAGE_REL_PPC_SECREL 0x000B#define IMAGE_REL_PPC_SECTION 0x000C#define IMAGE_REL_PPC_IFGLUE 0x000D#define IMAGE_REL_PPC_IMGLUE 0x000E#define IMAGE_REL_PPC_SECREL16 0x000F#define IMAGE_REL_PPC_REFHI 0x0010#define IMAGE_REL_PPC_REFLO 0x0011#define IMAGE_REL_PPC_PAIR 0x0012#define IMAGE_REL_PPC_SECRELLO 0x0013#define IMAGE_REL_PPC_SECRELHI 0x0014#define IMAGE_REL_PPC_GPREL 0x0015#define IMAGE_REL_PPC_TYPEMASK 0x00FF/* modifier bits */#define IMAGE_REL_PPC_NEG 0x0100#define IMAGE_REL_PPC_BRTAKEN 0x0200#define IMAGE_REL_PPC_BRNTAKEN 0x0400#define IMAGE_REL_PPC_TOCDEFN 0x0800/* SH3 ? relocation type */#define IMAGE_REL_SH3_ABSOLUTE 0x0000#define IMAGE_REL_SH3_DIRECT16 0x0001#define IMAGE_REL_SH3_DIRECT 0x0002#define IMAGE_REL_SH3_DIRECT8 0x0003#define IMAGE_REL_SH3_DIRECT8_WORD 0x0004#define IMAGE_REL_SH3_DIRECT8_LONG 0x0005#define IMAGE_REL_SH3_DIRECT4 0x0006#define IMAGE_REL_SH3_DIRECT4_WORD 0x0007#define IMAGE_REL_SH3_DIRECT4_LONG 0x0008#define IMAGE_REL_SH3_PCREL8_WORD 0x0009#define IMAGE_REL_SH3_PCREL8_LONG 0x000A#define IMAGE_REL_SH3_PCREL12_WORD 0x000B#define IMAGE_REL_SH3_STARTOF_SECTION 0x000C#define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D#define IMAGE_REL_SH3_SECTION 0x000E#define IMAGE_REL_SH3_SECREL 0x000F#define IMAGE_REL_SH3_DIRECT32_NB 0x0010/* ARM (Archimedes?) relocation types */#define IMAGE_REL_ARM_ABSOLUTE 0x0000#define IMAGE_REL_ARM_ADDR 0x0001#define IMAGE_REL_ARM_ADDR32NB 0x0002#define IMAGE_REL_ARM_BRANCH24 0x0003#define IMAGE_REL_ARM_BRANCH11 0x0004#define IMAGE_REL_ARM_SECTION 0x000E#define IMAGE_REL_ARM_SECREL 0x000F/* IA64 relocation types */#define IMAGE_REL_IA64_ABSOLUTE 0x0000#define IMAGE_REL_IA64_IMM14 0x0001#define IMAGE_REL_IA64_IMM22 0x0002#define IMAGE_REL_IA64_IMM64 0x0003#define IMAGE_REL_IA64_DIR 0x0004#define IMAGE_REL_IA64_DIR64 0x0005#define IMAGE_REL_IA64_PCREL21B 0x0006#define IMAGE_REL_IA64_PCREL21M 0x0007#define IMAGE_REL_IA64_PCREL21F 0x0008#define IMAGE_REL_IA64_GPREL22 0x0009#define IMAGE_REL_IA64_LTOFF22 0x000A#define IMAGE_REL_IA64_SECTION 0x000B#define IMAGE_REL_IA64_SECREL22 0x000C#define IMAGE_REL_IA64_SECREL64I 0x000D#define IMAGE_REL_IA64_SECREL 0x000E#define IMAGE_REL_IA64_LTOFF64 0x000F#define IMAGE_REL_IA64_DIR32NB 0x0010#define IMAGE_REL_IA64_RESERVED_11 0x0011#define IMAGE_REL_IA64_RESERVED_12 0x0012#define IMAGE_REL_IA64_RESERVED_13 0x0013#define IMAGE_REL_IA64_RESERVED_14 0x0014#define IMAGE_REL_IA64_RESERVED_15 0x0015#define IMAGE_REL_IA64_RESERVED_16 0x0016#define IMAGE_REL_IA64_ADDEND 0x001F/* archive format */#define IMAGE_ARCHIVE_START_SIZE 8#define IMAGE_ARCHIVE_START "!<arch>\n"#define IMAGE_ARCHIVE_END "`\n"#define IMAGE_ARCHIVE_PAD "\n"#define IMAGE_ARCHIVE_LINKER_MEMBER "/ "#define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// "typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER{ BYTE Name[16]; BYTE Date[12]; BYTE UserID[6]; BYTE GroupID[6]; BYTE Mode[8]; BYTE Size[10]; BYTE EndHeader[2];} IMAGE_ARCHIVE_MEMBER_HEADER, *PIMAGE_ARCHIVE_MEMBER_HEADER;#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60/* * Resource directory stuff */typedef struct _IMAGE_RESOURCE_DIRECTORY { DWORD Characteristics; DWORD TimeDateStamp; WORD MajorVersion; WORD MinorVersion; WORD NumberOfNamedEntries; WORD NumberOfIdEntries; /* IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; */} IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;#define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000#define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY { union { struct {#ifdef BITFIELDS_BIGENDIAN unsigned NameIsString:1; unsigned NameOffset:31;#else unsigned NameOffset:31; unsigned NameIsString:1;#endif } DUMMYSTRUCTNAME1; DWORD Name; struct {#ifdef WORDS_BIGENDIAN WORD __pad; WORD Id;#else WORD Id; WORD __pad;#endif } DUMMYSTRUCTNAME2; } DUMMYUNIONNAME1; union { DWORD OffsetToData; struct {#ifdef BITFIELDS_BIGENDIAN unsigned DataIsDirectory:1; unsigned OffsetToDirectory:31;#else unsigned OffsetToDirectory:31; unsigned DataIsDirectory:1;#endif } DUMMYSTRUCTNAME3; } DUMMYUNIONNAME2;} IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING { WORD Length; CHAR NameString[ 1 ];} IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -