86 lines
3.6 KiB
ArmAsm
86 lines
3.6 KiB
ArmAsm
#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 |