/* SPDX-License-Identifier: GPL-2.0-only */ #define DOS_MAGIC 0x5a4d typedef struct { uint16_t signature; uint16_t lastsize; uint16_t nblocks; uint16_t nreloc; uint16_t hdrsize; uint16_t minalloc; uint16_t maxalloc; uint16_t ss; uint16_t sp; uint16_t checksum; uint16_t ip; uint16_t cs; uint16_t relocpos; uint16_t noverlay; uint16_t reserved1[4]; uint16_t oem_id; uint16_t oem_info; uint16_t reserved2[10]; uint32_t e_lfanew; } dos_header_t; #define MACHINE_TYPE_X86 0x014c #define MACHINE_TYPE_X64 0x8664 #define MACHINE_TYPE_ARM64 0xAA64 typedef struct { uint8_t signature[4]; uint16_t machine; uint16_t num_sections; uint32_t timestamp; uint32_t symboltable; uint32_t num_symbols; uint16_t opt_header_size; uint16_t characteristics; } coff_header_t; #define PE_HDR_32_MAGIC 0x10b typedef struct { uint16_t signature; uint8_t major_linker_version; uint8_t minor_linker_version; uint32_t code_size; uint32_t data_size; uint32_t bss_size; uint32_t entry_point; uint32_t code_offset; uint32_t data_offset; uint32_t image_addr; uint32_t section_alignment; uint32_t file_alignment; uint16_t major_os_version; uint16_t minor_os_version; uint16_t major_image_version; uint16_t minor_image_version; uint16_t major_subsystem_version; uint16_t minor_subsystem_version; uint32_t reserved; uint32_t image_size; uint32_t header_size; uint32_t checksum; uint16_t subsystem; uint16_t characteristics; uint32_t stack_reserve_size; uint32_t stack_commit_size; uint32_t heap_reserve_size; uint32_t heap_commit_size; uint32_t loader_flags; uint32_t number_of_va_and_sizes; /* data directory not needed */ } pe_opt_header_32_t; #define PE_HDR_64_MAGIC 0x20b typedef struct { uint16_t signature; uint8_t major_linker_version; uint8_t minor_linker_version; uint32_t code_size; uint32_t data_size; uint32_t bss_size; uint32_t entry_point; uint32_t code_offset; uint64_t image_addr; uint32_t section_alignment; uint32_t file_alignment; uint16_t major_os_version; uint16_t minor_os_version; uint16_t major_image_version; uint16_t minor_image_version; uint16_t major_subsystem_version; uint16_t minor_subsystem_version; uint32_t reserved; uint32_t image_size; uint32_t header_size; uint32_t checksum; uint16_t subsystem; uint16_t characteristics; uint64_t stack_reserve_size; uint64_t stack_commit_size; uint64_t heap_reserve_size; uint64_t heap_commit_size; uint32_t loader_flags; uint32_t number_of_va_and_sizes; /* data directory not needed */ } pe_opt_header_64_t;