On Nov 3 17:02, Jon Turney wrote: > On 29/10/2022 09:32, Corinna Vinschen wrote: > > On Oct 28 16:05, Jon Turney wrote: > > > This adds an extra section to the stackdump, which lists the loaded > > > modules and their base address. This is perhaps useful as it makes it > > > immediately clear if RandomCrashInjectedDll.dll is loaded... > > > > > > XXX: It seems like the 'InMemoryOrder' part of 'InMemoryOrderModuleList' > > > is a lie? > > > > Probably just an alternative fact... > > Yeah. I did stared a bit at the code wondering if the structure layouts > were incorrect so we were somehow traversing one of the other module lists > with a different ordering, but everything looks correct. > > The attached might be a good idea, then, to ensure that module+offset is > calculated correctly.
Good idea, please push. Corinna > From ea47826047e8bb175b1b0e0286d7d7b8cf15c7fe Mon Sep 17 00:00:00 2001 > From: Jon Turney <jon.tur...@dronecode.org.uk> > Date: Tue, 1 Nov 2022 14:01:08 +0000 > Subject: [PATCH] Cygwin: Handle out of order modules for module offsets in > stackdump > > Improve address to module+offset conversion, to work correctly in the > presence of out-of-order elements in InMemoryOrderModuleList. > > Fixes: d59651d4 > --- > winsup/cygwin/exceptions.cc | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc > index 8cc454c90..c3433ab94 100644 > --- a/winsup/cygwin/exceptions.cc > +++ b/winsup/cygwin/exceptions.cc > @@ -342,11 +342,13 @@ prettyprint_va (PVOID func_va) > { > PLDR_DATA_TABLE_ENTRY mod = CONTAINING_RECORD (x, LDR_DATA_TABLE_ENTRY, > InMemoryOrderLinks); > - if (mod->DllBase > func_va) > + if ((func_va < mod->DllBase) || > + (func_va > (PVOID)((DWORD_PTR)mod->DllBase + mod->SizeOfImage))) > continue; > > __small_sprintf (buf, "%S+0x%x", &mod->BaseDllName, > (DWORD_PTR)func_va - (DWORD_PTR)mod->DllBase); > + break; > } > > return buf; > -- > 2.38.1 >