diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c index e4c6e448152..e18c9effeb3 100644 --- a/dlls/dbghelp/elf_module.c +++ b/dlls/dbghelp/elf_module.c @@ -324,6 +324,7 @@ static BOOL elf_map_file(struct elf_map_file_data* emfd, struct image_file_map* #else if (fmap->u.elf.elfhdr.e_ident[EI_CLASS] != ELFCLASS32) goto done; #endif + fmap->addr_size = fmap->u.elf.elfhdr.e_ident[EI_CLASS] == ELFCLASS64 ? 64 : 32; fmap->u.elf.sect = HeapAlloc(GetProcessHeap(), 0, fmap->u.elf.elfhdr.e_shnum * sizeof(fmap->u.elf.sect[0])); if (!fmap->u.elf.sect) goto done; diff --git a/dlls/dbghelp/image_private.h b/dlls/dbghelp/image_private.h index 2642f281548..2afed79b8a6 100644 --- a/dlls/dbghelp/image_private.h +++ b/dlls/dbghelp/image_private.h @@ -74,6 +74,7 @@ struct image_file_map { enum module_type modtype; + unsigned addr_size; /* either 16 (not used), 32 or 64 */ union { struct elf_file_map diff --git a/dlls/dbghelp/pe_module.c b/dlls/dbghelp/pe_module.c index 79a4d90a29c..f43d9711781 100644 --- a/dlls/dbghelp/pe_module.c +++ b/dlls/dbghelp/pe_module.c @@ -224,6 +224,12 @@ static BOOL pe_map_file(HANDLE file, struct image_file_map* fmap, enum module_ty if (!(nthdr = RtlImageNtHeader(mapping))) goto error; memcpy(&fmap->u.pe.ntheader, nthdr, sizeof(fmap->u.pe.ntheader)); + switch (nthdr->OptionalHeader.Magic) + { + case 0x10b: fmap->addr_size = 32; break; + case 0x20b: fmap->addr_size = 64; break; + default: return FALSE; + } section = (IMAGE_SECTION_HEADER*) ((char*)&nthdr->OptionalHeader + nthdr->FileHeader.SizeOfOptionalHeader); fmap->u.pe.sect = HeapAlloc(GetProcessHeap(), 0,