Microsoft PE (Portable Executable) file format: GraphViz block diagram (.dot) source

Application

Microsoft Windows

KS implementation details

Minimal Kaitai Struct required: 0.7

This page hosts a formal specification of Microsoft PE (Portable Executable) file format using Kaitai Struct. This specification can be automatically translated into a variety of programming languages to get a parsing library.

GraphViz block diagram source

microsoft_pe.dot

digraph {
	rankdir=LR;
	node [shape=plaintext];
	subgraph cluster__microsoft_pe {
		label="MicrosoftPe";
		graph[style=dotted];

		microsoft_pe__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
			<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
			<TR><TD PORT="mz1_pos">0</TD><TD PORT="mz1_size">64</TD><TD>MzPlaceholder</TD><TD PORT="mz1_type">mz1</TD></TR>
			<TR><TD PORT="mz2_pos">64</TD><TD PORT="mz2_size">(mz1.header_size - 64)</TD><TD></TD><TD PORT="mz2_type">mz2</TD></TR>
			<TR><TD PORT="pe_signature_pos">...</TD><TD PORT="pe_signature_size">4</TD><TD>50 45 00 00</TD><TD PORT="pe_signature_type">pe_signature</TD></TR>
			<TR><TD PORT="coff_hdr_pos">...</TD><TD PORT="coff_hdr_size">20</TD><TD>CoffHeader</TD><TD PORT="coff_hdr_type">coff_hdr</TD></TR>
			<TR><TD PORT="optional_hdr_pos">...</TD><TD PORT="optional_hdr_size">coff_hdr.size_of_optional_header</TD><TD>OptionalHeader</TD><TD PORT="optional_hdr_type">optional_hdr</TD></TR>
			<TR><TD PORT="sections_pos">...</TD><TD PORT="sections_size">40</TD><TD>Section</TD><TD PORT="sections_type">sections</TD></TR>
			<TR><TD COLSPAN="4" PORT="sections__repeat">repeat coff_hdr.number_of_sections times</TD></TR>
		</TABLE>>];
		subgraph cluster__optional_header_windows {
			label="MicrosoftPe::OptionalHeaderWindows";
			graph[style=dotted];

			optional_header_windows__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
				<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
				<TR><TD PORT="image_base_32_pos">0</TD><TD PORT="image_base_32_size">4</TD><TD>u4le</TD><TD PORT="image_base_32_type">image_base_32</TD></TR>
				<TR><TD PORT="image_base_64_pos">4</TD><TD PORT="image_base_64_size">8</TD><TD>u8le</TD><TD PORT="image_base_64_type">image_base_64</TD></TR>
				<TR><TD PORT="section_alignment_pos">12</TD><TD PORT="section_alignment_size">4</TD><TD>u4le</TD><TD PORT="section_alignment_type">section_alignment</TD></TR>
				<TR><TD PORT="file_alignment_pos">16</TD><TD PORT="file_alignment_size">4</TD><TD>u4le</TD><TD PORT="file_alignment_type">file_alignment</TD></TR>
				<TR><TD PORT="major_operating_system_version_pos">20</TD><TD PORT="major_operating_system_version_size">2</TD><TD>u2le</TD><TD PORT="major_operating_system_version_type">major_operating_system_version</TD></TR>
				<TR><TD PORT="minor_operating_system_version_pos">22</TD><TD PORT="minor_operating_system_version_size">2</TD><TD>u2le</TD><TD PORT="minor_operating_system_version_type">minor_operating_system_version</TD></TR>
				<TR><TD PORT="major_image_version_pos">24</TD><TD PORT="major_image_version_size">2</TD><TD>u2le</TD><TD PORT="major_image_version_type">major_image_version</TD></TR>
				<TR><TD PORT="minor_image_version_pos">26</TD><TD PORT="minor_image_version_size">2</TD><TD>u2le</TD><TD PORT="minor_image_version_type">minor_image_version</TD></TR>
				<TR><TD PORT="major_subsystem_version_pos">28</TD><TD PORT="major_subsystem_version_size">2</TD><TD>u2le</TD><TD PORT="major_subsystem_version_type">major_subsystem_version</TD></TR>
				<TR><TD PORT="minor_subsystem_version_pos">30</TD><TD PORT="minor_subsystem_version_size">2</TD><TD>u2le</TD><TD PORT="minor_subsystem_version_type">minor_subsystem_version</TD></TR>
				<TR><TD PORT="win32_version_value_pos">32</TD><TD PORT="win32_version_value_size">4</TD><TD>u4le</TD><TD PORT="win32_version_value_type">win32_version_value</TD></TR>
				<TR><TD PORT="size_of_image_pos">36</TD><TD PORT="size_of_image_size">4</TD><TD>u4le</TD><TD PORT="size_of_image_type">size_of_image</TD></TR>
				<TR><TD PORT="size_of_headers_pos">40</TD><TD PORT="size_of_headers_size">4</TD><TD>u4le</TD><TD PORT="size_of_headers_type">size_of_headers</TD></TR>
				<TR><TD PORT="check_sum_pos">44</TD><TD PORT="check_sum_size">4</TD><TD>u4le</TD><TD PORT="check_sum_type">check_sum</TD></TR>
				<TR><TD PORT="subsystem_pos">48</TD><TD PORT="subsystem_size">2</TD><TD>u2le→SubsystemEnum</TD><TD PORT="subsystem_type">subsystem</TD></TR>
				<TR><TD PORT="dll_characteristics_pos">50</TD><TD PORT="dll_characteristics_size">2</TD><TD>u2le</TD><TD PORT="dll_characteristics_type">dll_characteristics</TD></TR>
				<TR><TD PORT="size_of_stack_reserve_32_pos">52</TD><TD PORT="size_of_stack_reserve_32_size">4</TD><TD>u4le</TD><TD PORT="size_of_stack_reserve_32_type">size_of_stack_reserve_32</TD></TR>
				<TR><TD PORT="size_of_stack_reserve_64_pos">56</TD><TD PORT="size_of_stack_reserve_64_size">8</TD><TD>u8le</TD><TD PORT="size_of_stack_reserve_64_type">size_of_stack_reserve_64</TD></TR>
				<TR><TD PORT="size_of_stack_commit_32_pos">64</TD><TD PORT="size_of_stack_commit_32_size">4</TD><TD>u4le</TD><TD PORT="size_of_stack_commit_32_type">size_of_stack_commit_32</TD></TR>
				<TR><TD PORT="size_of_stack_commit_64_pos">68</TD><TD PORT="size_of_stack_commit_64_size">8</TD><TD>u8le</TD><TD PORT="size_of_stack_commit_64_type">size_of_stack_commit_64</TD></TR>
				<TR><TD PORT="size_of_heap_reserve_32_pos">76</TD><TD PORT="size_of_heap_reserve_32_size">4</TD><TD>u4le</TD><TD PORT="size_of_heap_reserve_32_type">size_of_heap_reserve_32</TD></TR>
				<TR><TD PORT="size_of_heap_reserve_64_pos">80</TD><TD PORT="size_of_heap_reserve_64_size">8</TD><TD>u8le</TD><TD PORT="size_of_heap_reserve_64_type">size_of_heap_reserve_64</TD></TR>
				<TR><TD PORT="size_of_heap_commit_32_pos">88</TD><TD PORT="size_of_heap_commit_32_size">4</TD><TD>u4le</TD><TD PORT="size_of_heap_commit_32_type">size_of_heap_commit_32</TD></TR>
				<TR><TD PORT="size_of_heap_commit_64_pos">92</TD><TD PORT="size_of_heap_commit_64_size">8</TD><TD>u8le</TD><TD PORT="size_of_heap_commit_64_type">size_of_heap_commit_64</TD></TR>
				<TR><TD PORT="loader_flags_pos">100</TD><TD PORT="loader_flags_size">4</TD><TD>u4le</TD><TD PORT="loader_flags_type">loader_flags</TD></TR>
				<TR><TD PORT="number_of_rva_and_sizes_pos">104</TD><TD PORT="number_of_rva_and_sizes_size">4</TD><TD>u4le</TD><TD PORT="number_of_rva_and_sizes_type">number_of_rva_and_sizes</TD></TR>
			</TABLE>>];
		}
		subgraph cluster__optional_header_data_dirs {
			label="MicrosoftPe::OptionalHeaderDataDirs";
			graph[style=dotted];

			optional_header_data_dirs__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
				<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
				<TR><TD PORT="export_table_pos">0</TD><TD PORT="export_table_size">8</TD><TD>DataDir</TD><TD PORT="export_table_type">export_table</TD></TR>
				<TR><TD PORT="import_table_pos">8</TD><TD PORT="import_table_size">8</TD><TD>DataDir</TD><TD PORT="import_table_type">import_table</TD></TR>
				<TR><TD PORT="resource_table_pos">16</TD><TD PORT="resource_table_size">8</TD><TD>DataDir</TD><TD PORT="resource_table_type">resource_table</TD></TR>
				<TR><TD PORT="exception_table_pos">24</TD><TD PORT="exception_table_size">8</TD><TD>DataDir</TD><TD PORT="exception_table_type">exception_table</TD></TR>
				<TR><TD PORT="certificate_table_pos">32</TD><TD PORT="certificate_table_size">8</TD><TD>DataDir</TD><TD PORT="certificate_table_type">certificate_table</TD></TR>
				<TR><TD PORT="base_relocation_table_pos">40</TD><TD PORT="base_relocation_table_size">8</TD><TD>DataDir</TD><TD PORT="base_relocation_table_type">base_relocation_table</TD></TR>
				<TR><TD PORT="debug_pos">48</TD><TD PORT="debug_size">8</TD><TD>DataDir</TD><TD PORT="debug_type">debug</TD></TR>
				<TR><TD PORT="architecture_pos">56</TD><TD PORT="architecture_size">8</TD><TD>DataDir</TD><TD PORT="architecture_type">architecture</TD></TR>
				<TR><TD PORT="global_ptr_pos">64</TD><TD PORT="global_ptr_size">8</TD><TD>DataDir</TD><TD PORT="global_ptr_type">global_ptr</TD></TR>
				<TR><TD PORT="tls_table_pos">72</TD><TD PORT="tls_table_size">8</TD><TD>DataDir</TD><TD PORT="tls_table_type">tls_table</TD></TR>
				<TR><TD PORT="load_config_table_pos">80</TD><TD PORT="load_config_table_size">8</TD><TD>DataDir</TD><TD PORT="load_config_table_type">load_config_table</TD></TR>
				<TR><TD PORT="bound_import_pos">88</TD><TD PORT="bound_import_size">8</TD><TD>DataDir</TD><TD PORT="bound_import_type">bound_import</TD></TR>
				<TR><TD PORT="iat_pos">96</TD><TD PORT="iat_size">8</TD><TD>DataDir</TD><TD PORT="iat_type">iat</TD></TR>
				<TR><TD PORT="delay_import_descriptor_pos">104</TD><TD PORT="delay_import_descriptor_size">8</TD><TD>DataDir</TD><TD PORT="delay_import_descriptor_type">delay_import_descriptor</TD></TR>
				<TR><TD PORT="clr_runtime_header_pos">112</TD><TD PORT="clr_runtime_header_size">8</TD><TD>DataDir</TD><TD PORT="clr_runtime_header_type">clr_runtime_header</TD></TR>
			</TABLE>>];
		}
		subgraph cluster__data_dir {
			label="MicrosoftPe::DataDir";
			graph[style=dotted];

			data_dir__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
				<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
				<TR><TD PORT="virtual_address_pos">0</TD><TD PORT="virtual_address_size">4</TD><TD>u4le</TD><TD PORT="virtual_address_type">virtual_address</TD></TR>
				<TR><TD PORT="size_pos">4</TD><TD PORT="size_size">4</TD><TD>u4le</TD><TD PORT="size_type">size</TD></TR>
			</TABLE>>];
		}
		subgraph cluster__optional_header {
			label="MicrosoftPe::OptionalHeader";
			graph[style=dotted];

			optional_header__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
				<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
				<TR><TD PORT="std_pos">0</TD><TD PORT="std_size">28</TD><TD>OptionalHeaderStd</TD><TD PORT="std_type">std</TD></TR>
				<TR><TD PORT="windows_pos">28</TD><TD PORT="windows_size">108</TD><TD>OptionalHeaderWindows</TD><TD PORT="windows_type">windows</TD></TR>
				<TR><TD PORT="data_dirs_pos">136</TD><TD PORT="data_dirs_size">120</TD><TD>OptionalHeaderDataDirs</TD><TD PORT="data_dirs_type">data_dirs</TD></TR>
			</TABLE>>];
		}
		subgraph cluster__section {
			label="MicrosoftPe::Section";
			graph[style=dotted];

			section__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
				<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
				<TR><TD PORT="name_pos">0</TD><TD PORT="name_size">8</TD><TD>str(UTF-8)</TD><TD PORT="name_type">name</TD></TR>
				<TR><TD PORT="virtual_size_pos">8</TD><TD PORT="virtual_size_size">4</TD><TD>u4le</TD><TD PORT="virtual_size_type">virtual_size</TD></TR>
				<TR><TD PORT="virtual_address_pos">12</TD><TD PORT="virtual_address_size">4</TD><TD>u4le</TD><TD PORT="virtual_address_type">virtual_address</TD></TR>
				<TR><TD PORT="size_of_raw_data_pos">16</TD><TD PORT="size_of_raw_data_size">4</TD><TD>u4le</TD><TD PORT="size_of_raw_data_type">size_of_raw_data</TD></TR>
				<TR><TD PORT="pointer_to_raw_data_pos">20</TD><TD PORT="pointer_to_raw_data_size">4</TD><TD>u4le</TD><TD PORT="pointer_to_raw_data_type">pointer_to_raw_data</TD></TR>
				<TR><TD PORT="pointer_to_relocations_pos">24</TD><TD PORT="pointer_to_relocations_size">4</TD><TD>u4le</TD><TD PORT="pointer_to_relocations_type">pointer_to_relocations</TD></TR>
				<TR><TD PORT="pointer_to_linenumbers_pos">28</TD><TD PORT="pointer_to_linenumbers_size">4</TD><TD>u4le</TD><TD PORT="pointer_to_linenumbers_type">pointer_to_linenumbers</TD></TR>
				<TR><TD PORT="number_of_relocations_pos">32</TD><TD PORT="number_of_relocations_size">2</TD><TD>u2le</TD><TD PORT="number_of_relocations_type">number_of_relocations</TD></TR>
				<TR><TD PORT="number_of_linenumbers_pos">34</TD><TD PORT="number_of_linenumbers_size">2</TD><TD>u2le</TD><TD PORT="number_of_linenumbers_type">number_of_linenumbers</TD></TR>
				<TR><TD PORT="characteristics_pos">36</TD><TD PORT="characteristics_size">4</TD><TD>u4le</TD><TD PORT="characteristics_type">characteristics</TD></TR>
			</TABLE>>];
			section__inst__body [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
				<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
				<TR><TD PORT="body_pos">pointer_to_raw_data</TD><TD PORT="body_size">size_of_raw_data</TD><TD></TD><TD PORT="body_type">body</TD></TR>
			</TABLE>>];
		}
		subgraph cluster__mz_placeholder {
			label="MicrosoftPe::MzPlaceholder";
			graph[style=dotted];

			mz_placeholder__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
				<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
				<TR><TD PORT="magic_pos">0</TD><TD PORT="magic_size">2</TD><TD>4D 5A</TD><TD PORT="magic_type">magic</TD></TR>
				<TR><TD PORT="data1_pos">2</TD><TD PORT="data1_size">58</TD><TD></TD><TD PORT="data1_type">data1</TD></TR>
				<TR><TD PORT="header_size_pos">60</TD><TD PORT="header_size_size">4</TD><TD>u4le</TD><TD PORT="header_size_type">header_size</TD></TR>
			</TABLE>>];
		}
		subgraph cluster__optional_header_std {
			label="MicrosoftPe::OptionalHeaderStd";
			graph[style=dotted];

			optional_header_std__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
				<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
				<TR><TD PORT="format_pos">0</TD><TD PORT="format_size">2</TD><TD>u2le→PeFormat</TD><TD PORT="format_type">format</TD></TR>
				<TR><TD PORT="major_linker_version_pos">2</TD><TD PORT="major_linker_version_size">1</TD><TD>u1</TD><TD PORT="major_linker_version_type">major_linker_version</TD></TR>
				<TR><TD PORT="minor_linker_version_pos">3</TD><TD PORT="minor_linker_version_size">1</TD><TD>u1</TD><TD PORT="minor_linker_version_type">minor_linker_version</TD></TR>
				<TR><TD PORT="size_of_code_pos">4</TD><TD PORT="size_of_code_size">4</TD><TD>u4le</TD><TD PORT="size_of_code_type">size_of_code</TD></TR>
				<TR><TD PORT="size_of_initialized_data_pos">8</TD><TD PORT="size_of_initialized_data_size">4</TD><TD>u4le</TD><TD PORT="size_of_initialized_data_type">size_of_initialized_data</TD></TR>
				<TR><TD PORT="size_of_uninitialized_data_pos">12</TD><TD PORT="size_of_uninitialized_data_size">4</TD><TD>u4le</TD><TD PORT="size_of_uninitialized_data_type">size_of_uninitialized_data</TD></TR>
				<TR><TD PORT="address_of_entry_point_pos">16</TD><TD PORT="address_of_entry_point_size">4</TD><TD>u4le</TD><TD PORT="address_of_entry_point_type">address_of_entry_point</TD></TR>
				<TR><TD PORT="base_of_code_pos">20</TD><TD PORT="base_of_code_size">4</TD><TD>u4le</TD><TD PORT="base_of_code_type">base_of_code</TD></TR>
				<TR><TD PORT="base_of_data_pos">24</TD><TD PORT="base_of_data_size">4</TD><TD>u4le</TD><TD PORT="base_of_data_type">base_of_data</TD></TR>
			</TABLE>>];
		}
		subgraph cluster__coff_header {
			label="MicrosoftPe::CoffHeader";
			graph[style=dotted];

			coff_header__seq [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
				<TR><TD BGCOLOR="#E0FFE0">pos</TD><TD BGCOLOR="#E0FFE0">size</TD><TD BGCOLOR="#E0FFE0">type</TD><TD BGCOLOR="#E0FFE0">id</TD></TR>
				<TR><TD PORT="machine_pos">0</TD><TD PORT="machine_size">2</TD><TD>u2le→MachineType</TD><TD PORT="machine_type">machine</TD></TR>
				<TR><TD PORT="number_of_sections_pos">2</TD><TD PORT="number_of_sections_size">2</TD><TD>u2le</TD><TD PORT="number_of_sections_type">number_of_sections</TD></TR>
				<TR><TD PORT="time_date_stamp_pos">4</TD><TD PORT="time_date_stamp_size">4</TD><TD>u4le</TD><TD PORT="time_date_stamp_type">time_date_stamp</TD></TR>
				<TR><TD PORT="pointer_to_symbol_table_pos">8</TD><TD PORT="pointer_to_symbol_table_size">4</TD><TD>u4le</TD><TD PORT="pointer_to_symbol_table_type">pointer_to_symbol_table</TD></TR>
				<TR><TD PORT="number_of_symbols_pos">12</TD><TD PORT="number_of_symbols_size">4</TD><TD>u4le</TD><TD PORT="number_of_symbols_type">number_of_symbols</TD></TR>
				<TR><TD PORT="size_of_optional_header_pos">16</TD><TD PORT="size_of_optional_header_size">2</TD><TD>u2le</TD><TD PORT="size_of_optional_header_type">size_of_optional_header</TD></TR>
				<TR><TD PORT="characteristics_pos">18</TD><TD PORT="characteristics_size">2</TD><TD>u2le</TD><TD PORT="characteristics_type">characteristics</TD></TR>
			</TABLE>>];
		}
	}
	microsoft_pe__seq:mz1_type -> mz_placeholder__seq [style=bold];
	mz_placeholder__seq:header_size_type -> microsoft_pe__seq:mz2_size [color="#404040"];
	microsoft_pe__seq:coff_hdr_type -> coff_header__seq [style=bold];
	coff_header__seq:size_of_optional_header_type -> microsoft_pe__seq:optional_hdr_size [color="#404040"];
	microsoft_pe__seq:optional_hdr_type -> optional_header__seq [style=bold];
	microsoft_pe__seq:sections_type -> section__seq [style=bold];
	coff_header__seq:number_of_sections_type -> microsoft_pe__seq:sections__repeat [color="#404040"];
	optional_header_data_dirs__seq:export_table_type -> data_dir__seq [style=bold];
	optional_header_data_dirs__seq:import_table_type -> data_dir__seq [style=bold];
	optional_header_data_dirs__seq:resource_table_type -> data_dir__seq [style=bold];
	optional_header_data_dirs__seq:exception_table_type -> data_dir__seq [style=bold];
	optional_header_data_dirs__seq:certificate_table_type -> data_dir__seq [style=bold];
	optional_header_data_dirs__seq:base_relocation_table_type -> data_dir__seq [style=bold];
	optional_header_data_dirs__seq:debug_type -> data_dir__seq [style=bold];
	optional_header_data_dirs__seq:architecture_type -> data_dir__seq [style=bold];
	optional_header_data_dirs__seq:global_ptr_type -> data_dir__seq [style=bold];
	optional_header_data_dirs__seq:tls_table_type -> data_dir__seq [style=bold];
	optional_header_data_dirs__seq:load_config_table_type -> data_dir__seq [style=bold];
	optional_header_data_dirs__seq:bound_import_type -> data_dir__seq [style=bold];
	optional_header_data_dirs__seq:iat_type -> data_dir__seq [style=bold];
	optional_header_data_dirs__seq:delay_import_descriptor_type -> data_dir__seq [style=bold];
	optional_header_data_dirs__seq:clr_runtime_header_type -> data_dir__seq [style=bold];
	optional_header__seq:std_type -> optional_header_std__seq [style=bold];
	optional_header__seq:windows_type -> optional_header_windows__seq [style=bold];
	optional_header__seq:data_dirs_type -> optional_header_data_dirs__seq [style=bold];
	section__seq:pointer_to_raw_data_type -> section__inst__body:body_pos [color="#404040"];
	section__seq:size_of_raw_data_type -> section__inst__body:body_size [color="#404040"];
}