|  | // Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | #ifndef RUNTIME_PLATFORM_PE_H_ | 
|  | #define RUNTIME_PLATFORM_PE_H_ | 
|  |  | 
|  | #include <platform/globals.h> | 
|  |  | 
|  | namespace dart { | 
|  |  | 
|  | namespace pe { | 
|  |  | 
|  | #pragma pack(push, 1) | 
|  |  | 
|  | static const intptr_t kPEOffsetOffset = 0x3c; | 
|  | static const char kPEMagic[] = {'P', 'E', '\0', '\0'}; | 
|  |  | 
|  | struct coff_file_header { | 
|  | uint16_t machine; | 
|  | uint16_t num_sections; | 
|  | uint32_t timestamp; | 
|  | uint32_t symbol_table_offset; | 
|  | uint32_t num_symbols; | 
|  | uint16_t optional_header_size; | 
|  | uint16_t characteristics; | 
|  | }; | 
|  |  | 
|  | // Does not include the BaseOfData field for PE32 (not PE32+) files, but we | 
|  | // don't need that to load a snapshot out of a PE file. | 
|  | struct coff_optional_header { | 
|  | uint16_t magic; | 
|  | uint8_t linker_major_version; | 
|  | uint8_t linker_minor_version; | 
|  | uint32_t code_size; | 
|  | uint32_t initialized_data_size; | 
|  | uint32_t uninitialized_data_size; | 
|  | uint32_t entry_point_address; | 
|  | uint32_t code_base_address; | 
|  | }; | 
|  |  | 
|  | static const uint16_t kPE32Magic = 0x10b; | 
|  | static const uint16_t kPE32PlusMagic = 0x20b; | 
|  |  | 
|  | static const intptr_t kCoffSectionNameSize = 8; | 
|  |  | 
|  | struct coff_section_header { | 
|  | char name[kCoffSectionNameSize]; | 
|  | uint32_t virtual_size; | 
|  | uint32_t virtual_address; | 
|  | uint32_t file_size; | 
|  | uint32_t file_offset; | 
|  | uint32_t relocations_offset; | 
|  | uint32_t line_numbers_offset; | 
|  | uint16_t num_relocations; | 
|  | uint16_t num_line_numbers; | 
|  | uint32_t characteristics; | 
|  | }; | 
|  |  | 
|  | #pragma pack(pop) | 
|  |  | 
|  | }  // namespace pe | 
|  |  | 
|  | }  // namespace dart | 
|  |  | 
|  | #endif  // RUNTIME_PLATFORM_PE_H_ |