| /* |
| * Copyright Eric Youngdale (1994) |
| */ |
| #ifndef __WINE_PEEXE_H |
| #define __WINE_PEEXE_H |
| |
| |
| |
| struct coff_header |
| { |
| u_short Machine; |
| u_short NumberOfSections; |
| u_long TimeDateStamp; |
| u_long PointerToSymbolTable; |
| u_long NumberOfSymbols; |
| u_short SizeOfOptionalHeader; |
| u_short Characteristics; |
| }; |
| |
| |
| /* These defines describe the meanings of the bits in the Characteristics |
| field */ |
| |
| #define IMAGE_FILE_RELOCS_STRIPPED 1 /* No relocation info */ |
| #define IMAGE_FILE_EXECUTABLE_IMAGE 2 |
| #define IMAGE_FILE_LINE_NUMS_STRIPPED 4 |
| #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 8 |
| #define IMAGE_FILE_16BIT_MACHINE 0x40 |
| #define IMAGE_FILE_BYTES_REVERSED_LO 0x80 |
| #define IMAGE_FILE_32BIT_MACHINE 0x100 |
| #define IMAGE_FILE_DEBUG_STRIPPED 0x200 |
| #define IMAGE_FILE_SYSTEM 0x1000 |
| #define IMAGE_FILE_DLL 0x2000 |
| #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 0x14d |
| #define IMAGE_FILE_MACHINE_I386 0x14c |
| #define IMAGE_FILE_MACHINE_R3000 0x162 |
| #define IMAGE_FILE_MACHINE_R4000 0x166 |
| #define IMAGE_FILE_MACHINE_ALPHA 0x184 |
| |
| struct Directory |
| { |
| u_long Virtual_address; |
| u_long Size; |
| }; |
| |
| |
| /* Optional coff header - used by NT to provide additional information. */ |
| |
| struct ocoffhdr |
| { |
| u_short Magic; /* Good old COFF magic 0413 */ |
| u_char MajorLinkerVersion; |
| u_char MinorLinkerVersion; |
| u_long SizeOfCode; |
| u_long SizeOfInitializedData; |
| u_long SizeOfUninitializedData; |
| u_long AddressOfEntryPoint; |
| u_long BaseOfCode; |
| u_long BaseOfData; |
| u_long BaseOfImage; |
| u_long SectionAlignment; |
| u_long FileAlignment; |
| u_short MajorOperatingSystemVersion; |
| u_short MinorOperatingSystemVersion; |
| u_short MajorImageVersion; |
| u_short MinorImageVersion; |
| u_short MajorSubsystemVersion; |
| u_short MinorSubsystemVersion; |
| u_long Unknown1; |
| u_long SizeOfImage; |
| u_long SizeOfHeaders; |
| u_long CheckSum; |
| u_short Subsystem; |
| u_short DllCharacteristics; |
| u_long SizeOfStackReserve; |
| u_long SizeOfStackCommit; |
| u_long SizeOfHeapReserve; |
| u_long SizeOfHeapCommit; |
| u_long LoaderFlags; |
| u_long NumberOfRvaAndSizes; |
| struct Directory DataDirectory[16]; |
| }; |
| |
| /* 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 |
| |
| struct pe_header_s |
| { |
| char magic[4]; /* Must be 'P', 'E', 0, 0 */ |
| struct coff_header coff; |
| struct ocoffhdr opt_coff; |
| }; |
| |
| |
| struct pe_segment_table |
| { |
| u_char Name[8]; |
| u_long Virtual_Size; |
| u_long Virtual_Address; |
| u_long Size_Of_Raw_Data; |
| u_long PointerToRawData; |
| u_long PointerToRelocations; |
| u_long PointerToLinenumbers; |
| u_short NumberOfRelocations; |
| u_short NumberOfLinenumbers; |
| u_long Characteristics; |
| }; |
| |
| /* These defines are for the Characteristics bitfield. */ |
| |
| #define IMAGE_SCN_TYPE_CNT_CODE 0x20 |
| #define IMAGE_SCN_TYPE_CNT_INITIALIZED_DATA 0x40 |
| #define IMAGE_SCN_TYPE_CNT_UNINITIALIZED_DATA 0x80 |
| #define IMAGE_SCN_MEM_DISCARDABLE 0x2000000 |
| #define IMAGE_SCN_MEM_SHARED 0x10000000 |
| #define IMAGE_SCN_MEM_EXECUTE 0x20000000 |
| #define IMAGE_SCN_MEM_READ 0x40000000 |
| #define IMAGE_SCN_MEM_WRITE 0x80000000 |
| |
| /* |
| * Import module directory stuff |
| */ |
| |
| struct PE_Import_Directory |
| { |
| u_int Import_List; |
| u_int TimeDate; |
| u_int Forwarder; |
| u_int ModuleName; |
| u_int Thunk_List; |
| }; |
| |
| struct pe_import_name |
| { |
| u_short Hint; |
| u_char Name[1]; |
| }; |
| |
| /* |
| * Export module directory stuff |
| */ |
| |
| struct PE_Export_Directory |
| { |
| u_long Characteristics; |
| u_long TimeDateStamp; |
| u_short Major_version; |
| u_short Minor_version; |
| u_long Name; |
| u_long Base; |
| u_long Number_Of_Functions; |
| u_long Number_Of_Names; |
| u_long * AddressOfFunctions; |
| u_long * AddressOfNames; |
| u_short * Address_Of_Name_Ordinals; |
| }; |
| |
| /* |
| * Resource directory stuff |
| */ |
| |
| struct PE_Resource_Directory |
| { |
| u_long Characteristics; |
| u_long TimeDateStamp; |
| u_short MajorVersion; |
| u_short MinorVersion; |
| u_short NumberOfNamedEntries; |
| u_short NumberOfIdEntries; |
| }; |
| |
| struct PE_Directory_Entry |
| { |
| u_long Name; |
| u_long OffsetToData; |
| }; |
| |
| struct PE_Directory_Name_String |
| { |
| u_short Length; |
| char NameString[1]; |
| }; |
| |
| struct PE_Directory_Name_String_U |
| { |
| u_short Length; |
| u_short NameString[1]; |
| }; |
| |
| struct PE_Resource_Leaf_Entry |
| { |
| u_long OffsetToData; |
| u_long Size; |
| u_long CodePage; |
| u_long Reserved; |
| }; |
| |
| #define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000 |
| #define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000 |
| |
| #endif /* __WINE_PEEXE_H */ |