| // Copyright 2009 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| typedef struct { |
| uint16 Machine; |
| uint16 NumberOfSections; |
| uint32 TimeDateStamp; |
| uint32 PointerToSymbolTable; |
| uint32 NumberOfSymbols; |
| uint16 SizeOfOptionalHeader; |
| uint16 Characteristics; |
| } IMAGE_FILE_HEADER; |
| |
| typedef struct { |
| uint32 VirtualAddress; |
| uint32 Size; |
| } IMAGE_DATA_DIRECTORY; |
| |
| typedef struct { |
| uint16 Magic; |
| uint8 MajorLinkerVersion; |
| uint8 MinorLinkerVersion; |
| uint32 SizeOfCode; |
| uint32 SizeOfInitializedData; |
| uint32 SizeOfUninitializedData; |
| uint32 AddressOfEntryPoint; |
| uint32 BaseOfCode; |
| uint32 BaseOfData; |
| uint32 ImageBase; |
| uint32 SectionAlignment; |
| uint32 FileAlignment; |
| uint16 MajorOperatingSystemVersion; |
| uint16 MinorOperatingSystemVersion; |
| uint16 MajorImageVersion; |
| uint16 MinorImageVersion; |
| uint16 MajorSubsystemVersion; |
| uint16 MinorSubsystemVersion; |
| uint32 Win32VersionValue; |
| uint32 SizeOfImage; |
| uint32 SizeOfHeaders; |
| uint32 CheckSum; |
| uint16 Subsystem; |
| uint16 DllCharacteristics; |
| uint32 SizeOfStackReserve; |
| uint32 SizeOfStackCommit; |
| uint32 SizeOfHeapReserve; |
| uint32 SizeOfHeapCommit; |
| uint32 LoaderFlags; |
| uint32 NumberOfRvaAndSizes; |
| IMAGE_DATA_DIRECTORY DataDirectory[16]; |
| } IMAGE_OPTIONAL_HEADER; |
| |
| typedef struct { |
| uint8 Name[8]; |
| uint32 VirtualSize; |
| uint32 VirtualAddress; |
| uint32 SizeOfRawData; |
| uint32 PointerToRawData; |
| uint32 PointerToRelocations; |
| uint32 PointerToLineNumbers; |
| uint16 NumberOfRelocations; |
| uint16 NumberOfLineNumbers; |
| uint32 Characteristics; |
| } IMAGE_SECTION_HEADER; |
| |
| typedef struct { |
| uint32 OriginalFirstThunk; |
| uint32 TimeDateStamp; |
| uint32 ForwarderChain; |
| uint32 Name; |
| uint32 FirstThunk; |
| } IMAGE_IMPORT_DESCRIPTOR; |
| |
| typedef struct _IMAGE_EXPORT_DIRECTORY { |
| uint32 Characteristics; |
| uint32 TimeDateStamp; |
| uint16 MajorVersion; |
| uint16 MinorVersion; |
| uint32 Name; |
| uint32 Base; |
| uint32 NumberOfFunctions; |
| uint32 NumberOfNames; |
| uint32 AddressOfFunctions; |
| uint32 AddressOfNames; |
| uint32 AddressOfNameOrdinals; |
| } IMAGE_EXPORT_DIRECTORY; |
| |
| #define PEBASE 0x00400000 |
| // SectionAlignment must be greater than or equal to FileAlignment. |
| // The default is the page size for the architecture. |
| #define PESECTALIGN 0x1000 |
| // FileAlignment should be a power of 2 between 512 and 64 K, inclusive. |
| // The default is 512. If the SectionAlignment is less than |
| // the architecture's page size, then FileAlignment must match SectionAlignment. |
| #define PEFILEALIGN (2<<8) |
| extern int32 PESECTHEADR; |
| extern int32 PEFILEHEADR; |
| |
| enum { |
| IMAGE_FILE_MACHINE_I386 = 0x14c, |
| IMAGE_FILE_MACHINE_AMD64 = 0x8664, |
| |
| IMAGE_FILE_RELOCS_STRIPPED = 0x0001, |
| IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002, |
| IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x0020, |
| IMAGE_FILE_32BIT_MACHINE = 0x0100, |
| IMAGE_FILE_DEBUG_STRIPPED = 0x0200, |
| |
| IMAGE_SCN_CNT_CODE = 0x00000020, |
| IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040, |
| IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080, |
| IMAGE_SCN_MEM_EXECUTE = 0x20000000, |
| IMAGE_SCN_MEM_READ = 0x40000000, |
| IMAGE_SCN_MEM_WRITE = 0x80000000, |
| IMAGE_SCN_MEM_DISCARDABLE = 0x2000000, |
| |
| IMAGE_DIRECTORY_ENTRY_EXPORT = 0, |
| IMAGE_DIRECTORY_ENTRY_IMPORT = 1, |
| IMAGE_DIRECTORY_ENTRY_RESOURCE = 2, |
| IMAGE_DIRECTORY_ENTRY_EXCEPTION = 3, |
| IMAGE_DIRECTORY_ENTRY_SECURITY = 4, |
| IMAGE_DIRECTORY_ENTRY_BASERELOC = 5, |
| IMAGE_DIRECTORY_ENTRY_DEBUG = 6, |
| IMAGE_DIRECTORY_ENTRY_COPYRIGHT = 7, |
| IMAGE_DIRECTORY_ENTRY_ARCHITECTURE = 7, |
| IMAGE_DIRECTORY_ENTRY_GLOBALPTR = 8, |
| IMAGE_DIRECTORY_ENTRY_TLS = 9, |
| IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG = 10, |
| IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT = 11, |
| IMAGE_DIRECTORY_ENTRY_IAT = 12, |
| IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT = 13, |
| IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14, |
| |
| IMAGE_SUBSYSTEM_WINDOWS_GUI = 2, |
| IMAGE_SUBSYSTEM_WINDOWS_CUI = 3, |
| }; |
| |
| void peinit(void); |
| void asmbpe(void); |
| void dope(void); |
| |
| IMAGE_SECTION_HEADER* newPEDWARFSection(char *name, vlong size); |
| |
| // X64 |
| typedef struct { |
| uint16 Magic; |
| uint8 MajorLinkerVersion; |
| uint8 MinorLinkerVersion; |
| uint32 SizeOfCode; |
| uint32 SizeOfInitializedData; |
| uint32 SizeOfUninitializedData; |
| uint32 AddressOfEntryPoint; |
| uint32 BaseOfCode; |
| uint64 ImageBase; |
| uint32 SectionAlignment; |
| uint32 FileAlignment; |
| uint16 MajorOperatingSystemVersion; |
| uint16 MinorOperatingSystemVersion; |
| uint16 MajorImageVersion; |
| uint16 MinorImageVersion; |
| uint16 MajorSubsystemVersion; |
| uint16 MinorSubsystemVersion; |
| uint32 Win32VersionValue; |
| uint32 SizeOfImage; |
| uint32 SizeOfHeaders; |
| uint32 CheckSum; |
| uint16 Subsystem; |
| uint16 DllCharacteristics; |
| uint64 SizeOfStackReserve; |
| uint64 SizeOfStackCommit; |
| uint64 SizeOfHeapReserve; |
| uint64 SizeOfHeapCommit; |
| uint32 LoaderFlags; |
| uint32 NumberOfRvaAndSizes; |
| IMAGE_DATA_DIRECTORY DataDirectory[16]; |
| } PE64_IMAGE_OPTIONAL_HEADER; |