mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-19 12:40:01 +00:00
This change also incorporates more bug fixes and improvements to a wide variety of small things. For example this fixes #860 so Windows console doesn't get corrupted after exit. An system stack memory map issue with aarch64 has been fixed. We no longer use O_NONBLOCK on AF_UNIX sockets. Crash reports on Arm64 will now demangle C++ symbols, even when c++filt isn't available. Most importantly the Apple M1 version of APE Loader is brought up to date by this change. A prebuilt unsigned binary for it is being included in build/bootstrap/. One more thing: retrieving the term dimensions under --strace was causing the stack to become corrupted and now that's been solved too. PSS: We're now including an ELF PT_NOTE for APE in the binaries we build, that has the APE Loader version.
97 lines
3 KiB
C
97 lines
3 KiB
C
#ifndef COSMOPOLITAN_LIBC_NT_STRUCT_IMAGEOPTIONALHEADER_H_
|
|
#define COSMOPOLITAN_LIBC_NT_STRUCT_IMAGEOPTIONALHEADER_H_
|
|
#include "libc/nt/pedef.internal.h"
|
|
#include "libc/nt/struct/imagedatadirectory.internal.h"
|
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
|
|
|
/**
|
|
* Portable Executable Optional Header.
|
|
*
|
|
* @see NtImageNtHeaders which encloses this
|
|
* @see NtImageFileHeader which precedes this
|
|
* @see NtImageSectionHeader which follows this
|
|
*/
|
|
struct NtImageOptionalHeader {
|
|
|
|
/*
|
|
* Must be kNtPe64bit.
|
|
*/
|
|
uint16_t Magic;
|
|
|
|
uint8_t MajorLinkerVersion;
|
|
uint8_t MinorLinkerVersion;
|
|
uint32_t SizeOfCode;
|
|
uint32_t SizeOfInitializedData;
|
|
uint32_t SizeOfUninitializedData;
|
|
|
|
/*
|
|
* The address of the entry point relative to the image base when the
|
|
* executable file is loaded into memory. For program images, this is
|
|
* the starting address. For device drivers, this is the address of
|
|
* the initialization function. An entry point is optional for DLLs.
|
|
* When no entry point is present, this field must be zero.
|
|
*/
|
|
uint32_t AddressOfEntryPoint;
|
|
|
|
uint32_t BaseOfCode;
|
|
|
|
/*
|
|
* The preferred address of the first byte of image when loaded into
|
|
* memory; must be a multiple of 64 K. The default for DLLs is
|
|
* 0x10000000. The default for Windows CE EXEs is 0x00010000. The
|
|
* default for Windows NT, Windows 2000, Windows XP, Windows 95,
|
|
* Windows 98, and Windows Me is 0x00400000.
|
|
*/
|
|
uint64_t ImageBase;
|
|
|
|
/*
|
|
* The alignment (in bytes) of sections when they are loaded into
|
|
* memory. It must be greater than or equal to FileAlignment. The
|
|
* default is the page size for the architecture.
|
|
*/
|
|
uint32_t SectionAlignment;
|
|
|
|
/*
|
|
* The alignment factor (in bytes) that is used to align the raw data
|
|
* of sections in the image file. The value 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.
|
|
*/
|
|
uint32_t FileAlignment;
|
|
|
|
uint16_t MajorOperatingSystemVersion;
|
|
uint16_t MinorOperatingSystemVersion;
|
|
uint16_t MajorImageVersion;
|
|
uint16_t MinorImageVersion;
|
|
uint16_t MajorSubsystemVersion;
|
|
uint16_t MinorSubsystemVersion;
|
|
uint32_t Win32VersionValue;
|
|
|
|
/*
|
|
* The size (in bytes) of the image, including all headers, as the
|
|
* image is loaded in memory. It must be a multiple of
|
|
* SectionAlignment.
|
|
*/
|
|
uint32_t SizeOfImage;
|
|
|
|
/*
|
|
* The combined size of an MS-DOS stub, PE header, and section headers
|
|
* rounded up to a multiple of FileAlignment.
|
|
*/
|
|
uint32_t SizeOfHeaders;
|
|
|
|
uint32_t CheckSum;
|
|
uint16_t Subsystem;
|
|
uint16_t DllCharacteristics;
|
|
uint64_t SizeOfStackReserve;
|
|
uint64_t SizeOfStackCommit;
|
|
uint64_t SizeOfHeapReserve;
|
|
uint64_t SizeOfHeapCommit;
|
|
uint32_t LoaderFlags;
|
|
uint32_t NumberOfRvaAndSizes;
|
|
struct NtImageDataDirectory DataDirectory[];
|
|
};
|
|
|
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
|
#endif /* COSMOPOLITAN_LIBC_NT_STRUCT_IMAGEOPTIONALHEADER_H_ */
|