1 #include <mono/metadata/metadata.h>
4 typedef guint32 mtoken_t;
7 char msdos_header [128];
12 guint16 coff_sections;
15 guint32 coff_symcount;
16 guint16 coff_opt_header_size;
17 guint16 coff_attributes;
20 #define COFF_ATTRIBUTE_EXECUTABLE_IMAGE 0x0002
21 #define COFF_ATTRIBUTE_LIBRARY_IMAGE 0x2000
29 guint32 pe_uninit_data_size;
30 guint32 pe_rva_entry_point;
31 guint32 pe_rva_code_base;
32 guint32 pe_rva_data_base;
36 guint32 pe_image_base; /* must be 0x400000 */
37 guint32 pe_section_align; /* must be 8192 */
38 guint32 pe_file_alignment; /* must be 512 or 4096 */
39 guint16 pe_os_major; /* must be 4 */
40 guint16 pe_os_minor; /* must be 0 */
41 guint16 pe_user_major;
42 guint16 pe_user_minor;
43 guint16 pe_subsys_major;
44 guint16 pe_subsys_minor;
45 guint32 pe_reserved_1;
46 guint32 pe_image_size;
47 guint32 pe_header_size;
49 guint16 pe_subsys_required;
51 guint32 pe_stack_reserve;
52 guint32 pe_stack_commit;
53 guint32 pe_heap_reserve;
54 guint32 pe_heap_commit;
55 guint32 pe_loader_flags;
56 guint32 pe_data_dir_count;
65 pe_dir_entry_t pe_export_table;
66 pe_dir_entry_t pe_import_table;
67 pe_dir_entry_t pe_resource_table;
68 pe_dir_entry_t pe_exception_table;
69 pe_dir_entry_t pe_certificate_table;
70 pe_dir_entry_t pe_reloc_table;
71 pe_dir_entry_t pe_debug;
72 pe_dir_entry_t pe_copyright;
73 pe_dir_entry_t pe_global_ptr;
74 pe_dir_entry_t pe_tls_table;
75 pe_dir_entry_t pe_load_config_table;
76 pe_dir_entry_t pe_bound_import;
77 pe_dir_entry_t pe_iat;
78 pe_dir_entry_t pe_delay_import_desc;
79 pe_dir_entry_t pe_cli_header;
80 pe_dir_entry_t pe_reserved;
93 guint32 st_virtual_size;
94 guint32 st_virtual_address;
95 guint32 st_raw_data_size;
96 guint32 st_raw_data_ptr;
98 guint32 st_lineno_ptr;
99 guint16 st_reloc_count;
100 guint16 st_line_count;
102 #define SECT_FLAGS_HAS_CODE 0x20
103 #define SECT_FLAGS_HAS_INITIALIZED_DATA 0x40
104 #define SECT_FLAGS_HAS_UNINITIALIZED_DATA 0x80
105 #define SECT_FLAGS_MEM_DISCARDABLE 0x02000000
106 #define SECT_FLAGS_MEM_NOT_CACHED 0x04000000
107 #define SECT_FLAGS_MEM_NOT_PAGED 0x08000000
108 #define SECT_FLAGS_MEM_SHARED 0x10000000
109 #define SECT_FLAGS_MEM_EXECUTE 0x20000000
110 #define SECT_FLAGS_MEM_READ 0x40000000
111 #define SECT_FLAGS_MEM_WRITE 0x80000000
118 guint16 ch_runtime_major;
119 guint16 ch_runtime_minor;
120 pe_dir_entry_t ch_metadata;
122 #define CLI_FLAGS_ILONLY 0x01
123 #define CLI_FLAGS_32BITREQUIRED 0x02
124 #define CLI_FLAGS_TRACKDEBUGDATA 0x00010000
127 mtoken_t ch_entry_point;
128 pe_dir_entry_t ch_resources;
129 pe_dir_entry_t ch_strong_name;
130 pe_dir_entry_t ch_code_manager_table;
131 pe_dir_entry_t ch_vtable_fixups;
132 pe_dir_entry_t ch_export_address_table_jumps;
134 /* The following are zero in the current docs */
135 pe_dir_entry_t ch_eeinfo_table;
136 pe_dir_entry_t ch_helper_table;
137 pe_dir_entry_t ch_dynamic_info;
138 pe_dir_entry_t ch_delay_load_info;
139 pe_dir_entry_t ch_module_image;
140 pe_dir_entry_t ch_external_fixups;
141 pe_dir_entry_t ch_ridmap;
142 pe_dir_entry_t ch_debug_map;
143 pe_dir_entry_t ch_ip_map;
146 /* This is not an on-disk structure */
148 dotnet_header_t cli_header;
149 int cli_section_count;
150 section_table_t *cli_section_tables;
152 cli_header_t cli_cli_header;
154 metadata_t cli_metadata;
157 guint32 cli_rva_image_map (cli_image_info_t *iinfo, guint32 rva);
158 char *cli_rva_map (cli_image_info_t *iinfo, guint32 rva);