#include "format/pe.h" #include "offset.h" .set salign, 0x1000 .set falign, 0x200 .section ".bstext", "ax" // allocatable, executable .word IMAGE_DOS_SIGNATURE .org 0x3c .long pe_header .global pe_header pe_header: .long IMAGE_NT_SIGNATURE coff_header: .word IMAGE_FILE_MACHINE_AMD64 .word section_count .long 0 /* TimeDateStamp */ .long 0 /* PointerToSymbolTable */ .long 0 /* NumberOfSymbols */ .word section_table - optional_header /* SizeOfOptionalHeader */ .word IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_DEBUG_STRIPPED | IMAGE_FILE_LINE_NUMS_STRIPPED /* Characteristics */ optional_header: .word IMAGE_NT_OPTIONAL_HDR64_MAGIC /* Magic */ .byte 0 /* MajorLinkerVersion */ .byte 0 /* MinorLinkerVersion */ .long CAP__data /* SizeOfCode */ .long CAP__end - CAP__data /* SizeOfInitializedData */ .long 0 /* SizeOfUninitializedData */ .long setup_size + efi_pe_entry /* AddressOfEntryPoint */ .long setup_size /* BaseOfCode */ extra_header_fields: .quad 0 /* ImageBase */ .long salign /* SectionAlignment */ .long falign /* FileAlignment */ .word 0 /* MajorOperatingSystemVersion */ .word 0 /* MinorOperatingSystemVersion */ .word 0 /* MajorImageVersion */ .word 0 /* MinorImageVersion */ .word 0 /* MajorSubsystemVersion */ .word 0 /* MinorSubsystemVersion */ .long 0 /* Win32VersionValue */ .long setup_size + CAP__end /* SizeOfImage */ .long salign /* SizeOfHeaders */ .long 0 /* CheckSum */ .word IMAGE_SUBSYSTEM_EFI_APPLICATION /* Subsystem */ .word IMAGE_DLLCHARACTERISTICS_NX_COMPAT /* DllCharacteristics */ .quad 0 /* SizeOfStackReserve */ .quad 0 /* SizeOfStackCommit */ .quad 0 /* SizeOfHeapReserve */ .quad 0 /* SizeOfHeapCommit */ .long 0 /* LoaderFlags */ .long (section_table - .) / 8 /* NumberOfRvaAndSizes */ .quad 0 .quad 0 .quad 0 .quad 0 .quad 0 .quad 0 section_table: # .ascii ".setup\0\0" # .long setup_size - salign /* VirtualSize */ # .long salign /* VirtualAddress */ # .long setup_size - salign /* SizeOfRawData */ # .long salign /* PointerToRawData */ # .long 0,0,0 # .long IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_DISCARDABLE .ascii ".text\0\0\0" .long text_size /* VirtualSize */ .long setup_size /* VirtualAddress */ .long text_size /* SizeOfRawData */ .long setup_size /* PointerToRawData */ .long 0,0,0 .long IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_EXECUTE .ascii ".data\0\0\0" .long CAP__end - CAP__data /* VirtualSize */ .long setup_size + CAP__data /* VirtualAddress */ .long CAP__edata - CAP__data /* SizeOfRawData */ .long setup_size + CAP__data /* PointerToRawData */ .long 0,0,0 .long IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE .set text_size, CAP__data .set section_count, (. - section_table) / 40