Module: wine Branch: master Commit: a7ad588ec568c03708fe1d9abe8079c1ac6ac664 URL: https://gitlab.winehq.org/wine/wine/-/commit/a7ad588ec568c03708fe1d9abe8079c...
Author: Eric Pouech epouech@codeweavers.com Date: Thu Mar 21 16:13:34 2024 +0100
winedbg: Don't reload a minidump for a different machine.
Signed-off-by: Eric Pouech epouech@codeweavers.com
---
programs/winedbg/tgt_minidump.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/programs/winedbg/tgt_minidump.c b/programs/winedbg/tgt_minidump.c index 309d5c526ab..87098491392 100644 --- a/programs/winedbg/tgt_minidump.c +++ b/programs/winedbg/tgt_minidump.c @@ -303,9 +303,10 @@ static enum dbg_start minidump_do_reload(struct tgt_process_minidump_data* data)
if (MiniDumpReadDumpStream(data->mapping, SystemInfoStream, &dir, &stream, NULL)) { - MINIDUMP_SYSTEM_INFO* msi = stream; - const char *str; - char tmp[128]; + MINIDUMP_SYSTEM_INFO *msi = stream; + USHORT machine = IMAGE_FILE_MACHINE_UNKNOWN; + const char *str; + char tmp[128];
dbg_printf("WineDbg starting minidump on pid %04lx\n", pid); switch (msi->ProcessorArchitecture) @@ -314,6 +315,7 @@ static enum dbg_start minidump_do_reload(struct tgt_process_minidump_data* data) str = "Unknown"; break; case PROCESSOR_ARCHITECTURE_INTEL: + machine = IMAGE_FILE_MACHINE_I386; strcpy(tmp, "x86 ["); switch (msi->ProcessorLevel) { @@ -355,6 +357,7 @@ static enum dbg_start minidump_do_reload(struct tgt_process_minidump_data* data) str = "PowerPC"; break; case PROCESSOR_ARCHITECTURE_AMD64: + machine = IMAGE_FILE_MACHINE_AMD64; str = "X86_64"; break; case PROCESSOR_ARCHITECTURE_ARM: @@ -462,6 +465,15 @@ static enum dbg_start minidump_do_reload(struct tgt_process_minidump_data* data) code + wes[1], code + wes[2], code + wes[3]); } } + if (machine == IMAGE_FILE_MACHINE_UNKNOWN +#ifdef __x86_64__ + || machine == IMAGE_FILE_MACHINE_I386 +#endif + ) + { + dbg_printf("Cannot reload this minidump because of incompatible/unsupported machine %x\n", machine); + return FALSE; + } }
dbg_curr_process = dbg_add_process(&be_process_minidump_io, pid, hProc);