1*4d9fdb46SRobert Mustacchi #ifndef DWARF_PE_DESCR_H 2*4d9fdb46SRobert Mustacchi #define DWARF_PE_DESCR_H 3*4d9fdb46SRobert Mustacchi /* 4*4d9fdb46SRobert Mustacchi Copyright (c) 2018, David Anderson All rights reserved. 5*4d9fdb46SRobert Mustacchi 6*4d9fdb46SRobert Mustacchi Redistribution and use in source and binary forms, with 7*4d9fdb46SRobert Mustacchi or without modification, are permitted provided that the 8*4d9fdb46SRobert Mustacchi following conditions are met: 9*4d9fdb46SRobert Mustacchi 10*4d9fdb46SRobert Mustacchi Redistributions of source code must retain the above 11*4d9fdb46SRobert Mustacchi copyright notice, this list of conditions and the following 12*4d9fdb46SRobert Mustacchi disclaimer. 13*4d9fdb46SRobert Mustacchi 14*4d9fdb46SRobert Mustacchi Redistributions in binary form must reproduce the above 15*4d9fdb46SRobert Mustacchi copyright notice, this list of conditions and the following 16*4d9fdb46SRobert Mustacchi disclaimer in the documentation and/or other materials 17*4d9fdb46SRobert Mustacchi provided with the distribution. 18*4d9fdb46SRobert Mustacchi 19*4d9fdb46SRobert Mustacchi THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 20*4d9fdb46SRobert Mustacchi CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 21*4d9fdb46SRobert Mustacchi INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22*4d9fdb46SRobert Mustacchi OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23*4d9fdb46SRobert Mustacchi ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 24*4d9fdb46SRobert Mustacchi CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25*4d9fdb46SRobert Mustacchi SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26*4d9fdb46SRobert Mustacchi NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27*4d9fdb46SRobert Mustacchi LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28*4d9fdb46SRobert Mustacchi HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29*4d9fdb46SRobert Mustacchi CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 30*4d9fdb46SRobert Mustacchi OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 31*4d9fdb46SRobert Mustacchi EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32*4d9fdb46SRobert Mustacchi */ 33*4d9fdb46SRobert Mustacchi 34*4d9fdb46SRobert Mustacchi #ifdef __cplusplus 35*4d9fdb46SRobert Mustacchi extern "C" { 36*4d9fdb46SRobert Mustacchi #endif /* __cplusplus */ 37*4d9fdb46SRobert Mustacchi 38*4d9fdb46SRobert Mustacchi #define IMAGE_DOS_SIGNATURE_dw 0x5a4d /* le on disk 'M' 'Z' */ 39*4d9fdb46SRobert Mustacchi #define IMAGE_DOS_REVSIGNATURE_dw 0x4d5a /* be on disk */ 40*4d9fdb46SRobert Mustacchi #define IMAGE_NT_SIGNATURE_dw 0x00004550 41*4d9fdb46SRobert Mustacchi 42*4d9fdb46SRobert Mustacchi #ifndef TYP 43*4d9fdb46SRobert Mustacchi #define TYP(n,l) char n[l] 44*4d9fdb46SRobert Mustacchi #endif /* TYPE */ 45*4d9fdb46SRobert Mustacchi 46*4d9fdb46SRobert Mustacchi 47*4d9fdb46SRobert Mustacchi /* Data types 48*4d9fdb46SRobert Mustacchi see https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx */ 49*4d9fdb46SRobert Mustacchi 50*4d9fdb46SRobert Mustacchi /*#define FIELD_OFFSET(type,field) ((LONG)(LONG_PTR)&(((type *)0)->field))*/ 51*4d9fdb46SRobert Mustacchi 52*4d9fdb46SRobert Mustacchi #define IMAGE_SIZEOF_SYMBOL 18 53*4d9fdb46SRobert Mustacchi 54*4d9fdb46SRobert Mustacchi struct dos_header_dw { 55*4d9fdb46SRobert Mustacchi TYP(dh_mz,2); 56*4d9fdb46SRobert Mustacchi TYP(dh_dos_data,58); 57*4d9fdb46SRobert Mustacchi TYP(dh_image_offset,4); 58*4d9fdb46SRobert Mustacchi }; 59*4d9fdb46SRobert Mustacchi 60*4d9fdb46SRobert Mustacchi /* IMAGE_FILE_HEADER_dw 61*4d9fdb46SRobert Mustacchi see https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms680313(v=vs.85).aspx */ 62*4d9fdb46SRobert Mustacchi 63*4d9fdb46SRobert Mustacchi typedef struct 64*4d9fdb46SRobert Mustacchi { 65*4d9fdb46SRobert Mustacchi TYP(Machine,2); 66*4d9fdb46SRobert Mustacchi TYP(NumberOfSections,2); 67*4d9fdb46SRobert Mustacchi TYP(TimeDateStamp,4); 68*4d9fdb46SRobert Mustacchi TYP(PointerToSymbolTable,4); 69*4d9fdb46SRobert Mustacchi TYP(NumberOfSymbols,4); 70*4d9fdb46SRobert Mustacchi TYP(SizeOfOptionalHeader,2); 71*4d9fdb46SRobert Mustacchi TYP(Characteristics,2); 72*4d9fdb46SRobert Mustacchi } IMAGE_FILE_HEADER_dw; 73*4d9fdb46SRobert Mustacchi 74*4d9fdb46SRobert Mustacchi /* IMAGE_DATA_DIRECTORY_dw 75*4d9fdb46SRobert Mustacchi see https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms680305(v=vs.85).aspx */ 76*4d9fdb46SRobert Mustacchi 77*4d9fdb46SRobert Mustacchi typedef struct 78*4d9fdb46SRobert Mustacchi { 79*4d9fdb46SRobert Mustacchi TYP(VirtualAddress,4); 80*4d9fdb46SRobert Mustacchi TYP(Size,4); 81*4d9fdb46SRobert Mustacchi } IMAGE_DATA_DIRECTORY_dw; 82*4d9fdb46SRobert Mustacchi 83*4d9fdb46SRobert Mustacchi /* IMAGE_OPTIONAL_HEADER 84*4d9fdb46SRobert Mustacchi see https://msdn.microsoft.com/en-us/library/windows/desktop/ms680339(v=vs.85).aspx */ 85*4d9fdb46SRobert Mustacchi 86*4d9fdb46SRobert Mustacchi #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 87*4d9fdb46SRobert Mustacchi 88*4d9fdb46SRobert Mustacchi typedef struct 89*4d9fdb46SRobert Mustacchi { 90*4d9fdb46SRobert Mustacchi TYP(Magic,2); 91*4d9fdb46SRobert Mustacchi unsigned char MajorLinkerVersion; 92*4d9fdb46SRobert Mustacchi unsigned char MinorLinkerVersion; 93*4d9fdb46SRobert Mustacchi TYP(SizeOfCode,4); 94*4d9fdb46SRobert Mustacchi TYP(SizeOfInitializedData,4); 95*4d9fdb46SRobert Mustacchi TYP(SizeOfUninitializedData,4); 96*4d9fdb46SRobert Mustacchi TYP(AddressOfEntryPoint,4); 97*4d9fdb46SRobert Mustacchi TYP(BaseOfCode,4); 98*4d9fdb46SRobert Mustacchi TYP(BaseOfData,4); 99*4d9fdb46SRobert Mustacchi TYP(ImageBase,4); 100*4d9fdb46SRobert Mustacchi TYP(SectionAlignment,4); 101*4d9fdb46SRobert Mustacchi TYP(FileAlignment,4); 102*4d9fdb46SRobert Mustacchi TYP(MajorOperatingSystemVersion,2); 103*4d9fdb46SRobert Mustacchi TYP(MinorOperatingSystemVersion,2); 104*4d9fdb46SRobert Mustacchi TYP(MajorImageVersion,2); 105*4d9fdb46SRobert Mustacchi TYP(MinorImageVersion,2); 106*4d9fdb46SRobert Mustacchi TYP(MajorSubsystemVersion,2); 107*4d9fdb46SRobert Mustacchi TYP(MinorSubsystemVersion,2); 108*4d9fdb46SRobert Mustacchi TYP(Win32VersionValue,4); 109*4d9fdb46SRobert Mustacchi TYP(SizeOfImage,4); 110*4d9fdb46SRobert Mustacchi TYP(SizeOfHeaders,4); 111*4d9fdb46SRobert Mustacchi TYP(CheckSum,4); 112*4d9fdb46SRobert Mustacchi TYP(Subsystem,2); 113*4d9fdb46SRobert Mustacchi TYP(DllCharacteristics,2); 114*4d9fdb46SRobert Mustacchi TYP(SizeOfStackReserve,4); 115*4d9fdb46SRobert Mustacchi TYP(SizeOfStackCommit,4); 116*4d9fdb46SRobert Mustacchi TYP(SizeOfHeapReserve,4); 117*4d9fdb46SRobert Mustacchi TYP(SizeOfHeapCommit,4); 118*4d9fdb46SRobert Mustacchi TYP(LoaderFlags,4); 119*4d9fdb46SRobert Mustacchi TYP(NumberOfRvaAndSizes,4); 120*4d9fdb46SRobert Mustacchi IMAGE_DATA_DIRECTORY_dw DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; 121*4d9fdb46SRobert Mustacchi } IMAGE_OPTIONAL_HEADER32_dw; 122*4d9fdb46SRobert Mustacchi 123*4d9fdb46SRobert Mustacchi typedef struct 124*4d9fdb46SRobert Mustacchi { 125*4d9fdb46SRobert Mustacchi TYP(Magic,2); 126*4d9fdb46SRobert Mustacchi unsigned char MajorLinkerVersion; 127*4d9fdb46SRobert Mustacchi unsigned char MinorLinkerVersion; 128*4d9fdb46SRobert Mustacchi TYP(SizeOfCode,4); 129*4d9fdb46SRobert Mustacchi TYP(SizeOfInitializedData,4); 130*4d9fdb46SRobert Mustacchi TYP(SizeOfUninitializedData,4); 131*4d9fdb46SRobert Mustacchi TYP(AddressOfEntryPoint,4); 132*4d9fdb46SRobert Mustacchi TYP(BaseOfCode,4); 133*4d9fdb46SRobert Mustacchi TYP(ImageBase,8); 134*4d9fdb46SRobert Mustacchi TYP(SectionAlignment,4); 135*4d9fdb46SRobert Mustacchi TYP(FileAlignment,4); 136*4d9fdb46SRobert Mustacchi TYP(MajorOperatingSystemVersion,2); 137*4d9fdb46SRobert Mustacchi TYP(MinorOperatingSystemVersion,2); 138*4d9fdb46SRobert Mustacchi TYP(MajorImageVersion,2); 139*4d9fdb46SRobert Mustacchi TYP(MinorImageVersion,2); 140*4d9fdb46SRobert Mustacchi TYP(MajorSubsystemVersion,2); 141*4d9fdb46SRobert Mustacchi TYP(MinorSubsystemVersion,2); 142*4d9fdb46SRobert Mustacchi TYP(Win32VersionValue,4); 143*4d9fdb46SRobert Mustacchi TYP(SizeOfImage,4); 144*4d9fdb46SRobert Mustacchi TYP(SizeOfHeaders,4); 145*4d9fdb46SRobert Mustacchi TYP(CheckSum,4); 146*4d9fdb46SRobert Mustacchi TYP(Subsystem,2); 147*4d9fdb46SRobert Mustacchi TYP(DllCharacteristics,2); 148*4d9fdb46SRobert Mustacchi TYP(SizeOfStackReserve,8); 149*4d9fdb46SRobert Mustacchi TYP(SizeOfStackCommit,8); 150*4d9fdb46SRobert Mustacchi TYP(SizeOfHeapReserve,8); 151*4d9fdb46SRobert Mustacchi TYP(SizeOfHeapCommit,8); 152*4d9fdb46SRobert Mustacchi TYP(LoaderFlags,4); 153*4d9fdb46SRobert Mustacchi TYP(NumberOfRvaAndSizes,4); 154*4d9fdb46SRobert Mustacchi IMAGE_DATA_DIRECTORY_dw DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; 155*4d9fdb46SRobert Mustacchi } IMAGE_OPTIONAL_HEADER64_dw; 156*4d9fdb46SRobert Mustacchi 157*4d9fdb46SRobert Mustacchi /* IMAGE_NT_HEADERS 158*4d9fdb46SRobert Mustacchi see https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms680336(v=vs.85).aspx */ 159*4d9fdb46SRobert Mustacchi 160*4d9fdb46SRobert Mustacchi #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b 161*4d9fdb46SRobert Mustacchi #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b 162*4d9fdb46SRobert Mustacchi #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107 163*4d9fdb46SRobert Mustacchi 164*4d9fdb46SRobert Mustacchi typedef struct 165*4d9fdb46SRobert Mustacchi { 166*4d9fdb46SRobert Mustacchi TYP(Signature,4); 167*4d9fdb46SRobert Mustacchi IMAGE_FILE_HEADER_dw FileHeader; 168*4d9fdb46SRobert Mustacchi IMAGE_OPTIONAL_HEADER64_dw OptionalHeader; 169*4d9fdb46SRobert Mustacchi } IMAGE_NT_HEADERS64_dw, *PIMAGE_NT_HEADERS64_dw; 170*4d9fdb46SRobert Mustacchi 171*4d9fdb46SRobert Mustacchi typedef struct 172*4d9fdb46SRobert Mustacchi { 173*4d9fdb46SRobert Mustacchi TYP(Signature,4); 174*4d9fdb46SRobert Mustacchi IMAGE_FILE_HEADER_dw FileHeader; 175*4d9fdb46SRobert Mustacchi IMAGE_OPTIONAL_HEADER32_dw OptionalHeader; 176*4d9fdb46SRobert Mustacchi } IMAGE_NT_HEADERS32_dw, *PIMAGE_NT_HEADERS32_dw; 177*4d9fdb46SRobert Mustacchi 178*4d9fdb46SRobert Mustacchi 179*4d9fdb46SRobert Mustacchi /* IMAGE_SECTION_HEADER_dw 180*4d9fdb46SRobert Mustacchi see: 181*4d9fdb46SRobert Mustacchi https://msdn.microsoft.com/en-us/library/windows/desktop/ms680341(v=vs.85).aspx 182*4d9fdb46SRobert Mustacchi and, for details on VirtualSize and SizeOfRawData: 183*4d9fdb46SRobert Mustacchi https://docs.microsoft.com/en-us/windows/desktop/api/winnt/ns-winnt-_image_section_header */ 184*4d9fdb46SRobert Mustacchi 185*4d9fdb46SRobert Mustacchi #define IMAGE_SIZEOF_SHORT_NAME 8 186*4d9fdb46SRobert Mustacchi 187*4d9fdb46SRobert Mustacchi typedef struct 188*4d9fdb46SRobert Mustacchi { 189*4d9fdb46SRobert Mustacchi char Name[IMAGE_SIZEOF_SHORT_NAME]; 190*4d9fdb46SRobert Mustacchi union { 191*4d9fdb46SRobert Mustacchi TYP(PhysicalAddress,4); 192*4d9fdb46SRobert Mustacchi TYP(VirtualSize,4); 193*4d9fdb46SRobert Mustacchi } Misc; 194*4d9fdb46SRobert Mustacchi TYP(VirtualAddress,4); 195*4d9fdb46SRobert Mustacchi TYP(SizeOfRawData,4); 196*4d9fdb46SRobert Mustacchi TYP(PointerToRawData,4); 197*4d9fdb46SRobert Mustacchi TYP(PointerToRelocations,4); 198*4d9fdb46SRobert Mustacchi TYP(PointerToLinenumbers,4); 199*4d9fdb46SRobert Mustacchi TYP(NumberOfRelocations,2); 200*4d9fdb46SRobert Mustacchi TYP(NumberOfLinenumbers,2); 201*4d9fdb46SRobert Mustacchi TYP(Characteristics,4); 202*4d9fdb46SRobert Mustacchi } IMAGE_SECTION_HEADER_dw, *PIMAGE_SECTION_HEADER_dw; 203*4d9fdb46SRobert Mustacchi 204*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_SCALE_INDEX 0x00000001 205*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_TYPE_NO_PAD 0x00000008 206*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_CNT_CODE 0x00000020 207*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 208*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 209*4d9fdb46SRobert Mustacchi 210*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_LNK_OTHER 0x00000100 211*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_LNK_INFO 0x00000200 212*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_LNK_REMOVE 0x00000800 213*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_LNK_COMDAT 0x00001000 214*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x00004000 215*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_MEM_FARDATA 0x00008000 216*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_MEM_PURGEABLE 0x00020000 217*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_MEM_LOCKED 0x00040000 218*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_MEM_PRELOAD 0x00080000 219*4d9fdb46SRobert Mustacchi 220*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_1BYTES 0x00100000 221*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_2BYTES 0x00200000 222*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_4BYTES 0x00300000 223*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_8BYTES 0x00400000 224*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_16BYTES 0x00500000 225*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_32BYTES 0x00600000 226*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_64BYTES 0x00700000 227*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_128BYTES 0x00800000 228*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_256BYTES 0x00900000 229*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_512BYTES 0x00A00000 230*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000 231*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000 232*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000 233*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000 234*4d9fdb46SRobert Mustacchi 235*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_ALIGN_MASK 0x00F00000 236*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 237*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 238*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 239*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 240*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_MEM_SHARED 0x10000000 241*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_MEM_EXECUTE 0x20000000 242*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_MEM_READ 0x40000000 243*4d9fdb46SRobert Mustacchi #define IMAGE_SCN_MEM_WRITE 0x80000000 244*4d9fdb46SRobert Mustacchi 245*4d9fdb46SRobert Mustacchi #ifdef __cplusplus 246*4d9fdb46SRobert Mustacchi } 247*4d9fdb46SRobert Mustacchi #endif /* __cplusplus */ 248*4d9fdb46SRobert Mustacchi 249*4d9fdb46SRobert Mustacchi 250*4d9fdb46SRobert Mustacchi #endif /* DWARF_PE_DESCR_H */ 251