LoadOEMResource crash [Was: Re: Problem report: SHRINKER.ERR, fix to DEVICE_Open/CreateFileA? ]
Robert Baruch
autophile at starband.net
Sat Dec 8 16:04:58 CST 2001
More information on exception #2. The offending function is:
/**********************************************************************
* find_entry_by_id
*
* Find an entry by id in a resource directory
*/
static const IMAGE_RESOURCE_DIRECTORY *find_entry_by_id( const
IMAGE_RESOURCE_DIRECTORY *dir,
WORD id, const
void *root )
{
const IMAGE_RESOURCE_DIRECTORY_ENTRY *entry;
int min, max, pos;
entry = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1);
min = dir->NumberOfNamedEntries;
max = min + dir->NumberOfIdEntries - 1;
while (min <= max)
{
pos = (min + max) / 2;
if (entry[pos].u1.s2.Id == id)
return (IMAGE_RESOURCE_DIRECTORY *)((char *)root +
entry[pos].u2.s3.OffsetToDirectory);
if (entry[pos].u1.s2.Id > id) max = pos - 1;
else min = pos + 1;
}
return NULL;
}
Where the offending line is
min = dir->NumberOfNamedEntries;
It looks like the call was made with dir = 0x0045F000, id = 0xE, and I'm
not sure about root.
Probably find_entry_by_id was called from either PE_FindResourceW or
PE_FindResourceExW, possibly through find_entry_by_nameW, which was
called by RES_FindResource2, which is the last trace before the exception.
If I could get winedbg/gdb to continue past the first exception but stop
at the second, I might be able to find out more :(
--Rob
More information about the wine-users
mailing list