diff --git a/src/pe/pe.c b/src/pe/pe.c index b823bbbf..3726df0c 100644 --- a/src/pe/pe.c +++ b/src/pe/pe.c @@ -408,6 +408,20 @@ pe_subsystem_from_string(String8 string) //////////////////////////////// //~ rjf: Parser Functions +internal B32 +pe_check_magic(String8 data) +{ + B32 is_pe = 0; + PE_DosHeader dos_header = {0}; + str8_deserial_read_struct(data, 0, &dos_header); + if (dos_header.magic == PE_DOS_MAGIC) { + U32 pe_magic = 0; + str8_deserial_read_struct(data, dos_header.coff_file_offset, &pe_magic); + is_pe= pe_magic == PE_MAGIC; + } + return is_pe; +} + internal PE_BinInfo pe_bin_info_from_data(Arena *arena, String8 data) { diff --git a/src/pe/pe.h b/src/pe/pe.h index c6e40254..8ff6a741 100644 --- a/src/pe/pe.h +++ b/src/pe/pe.h @@ -1072,6 +1072,7 @@ internal String8 pe_string_from_dll_characteristics(Arena *arena, PE_DllCharacte //////////////////////////////// //~ rjf: Parser Functions +internal B32 pe_check_magic(String8 data); internal PE_BinInfo pe_bin_info_from_data(Arena *arena, String8 data); internal PE_DebugInfoList pe_parse_debug_directory(Arena *arena, String8 raw_image, String8 raw_debug_dir); diff --git a/src/raddump/raddump.c b/src/raddump/raddump.c index 479ffe1e..0af1b6e1 100644 --- a/src/raddump/raddump.c +++ b/src/raddump/raddump.c @@ -214,14 +214,6 @@ rd_format_line_from_voff(Arena *arena, RDI_Parsed *rdi, U64 voff, PathStyle path return result; } -internal B32 -rd_is_pe(String8 raw_data) -{ - PE_DosHeader header = {0}; - str8_deserial_read_struct(raw_data, 0, &header); - return header.magic == PE_DOS_MAGIC; -} - internal B32 rd_is_rdi(String8 raw_data) { @@ -316,7 +308,7 @@ rd_format_preamble(Arena *arena, String8List *out, String8 indent, String8 input input_type_string = "Big Obj"; } else if (coff_is_obj(raw_data)) { input_type_string = "Obj"; - } else if (rd_is_pe(raw_data)) { + } else if (pe_check_magic(raw_data)) { input_type_string = "COFF/PE"; } else if (rd_is_rdi(raw_data)) { input_type_string = "RDI"; diff --git a/src/raddump/raddump.h b/src/raddump/raddump.h index 16e074db..37a2c360 100644 --- a/src/raddump/raddump.h +++ b/src/raddump/raddump.h @@ -140,7 +140,6 @@ typedef struct RD_Line // raddump -internal B32 rd_is_pe (String8 raw_data); internal B32 rd_is_rdi(String8 raw_data); internal String8 rd_string_from_flags(Arena *arena, String8List list, U64 remaining_flags); diff --git a/src/raddump/raddump_main.c b/src/raddump/raddump_main.c index 98888163..48b48b1b 100644 --- a/src/raddump/raddump_main.c +++ b/src/raddump/raddump_main.c @@ -269,7 +269,7 @@ entry_point(CmdLine *cmdline) coff_print_big_obj(arena, out, indent, raw_data, opts); } else if (coff_is_obj(raw_data)) { coff_print_obj(arena, out, indent, raw_data, opts); - } else if (rd_is_pe(raw_data)) { + } else if (pe_check_magic(raw_data)) { RDI_Parsed *rdi = 0; if (!(opts & RD_Option_NoRdi)) { rdi = rd_rdi_from_pe(arena, file_path, raw_data);