Hello,
I am trying to find out, why Internet Explorer stopped working
with Alexandres recent changes to memory/virtual.c. It looks like
there are some interactions between IsBadReadPtr() and
VirtualAlloc().
When COMCTL32 is by IE loaded, PE_LoadImage() checks, if this is a
system DLL (base > 2GB), which it is, and thus checks if it is
allready loaded at that address. This check is done by first calling
IsBadReadPtr() for the base address and then comparing the content
of that address with the content of the library to load.
The old IsBadReadPtr() code returned true in this situation, while the
new code returns false (the addresses and the relay output is identical
up to this point). Most intersting is the fact, that the
VirtualAlloc() call in PE_LoadImage() fails, _if_ IsBadReadPtr() has
been called before. As a result, COMCTL32 will be relocated to another
address and not shared, when it is loaded a second time later by the
same process. COMCTL32 detects this situation and exits the process.
To test this, I have put a counter in IsBadReadPtr() to return true
after the call in question without doing the actual checking.
Now, what I don't understand is how the new code in IsBadReadPtr()
can alter the behavior of mmap()?
Greetings,
Peter
--
Peter Ganten
[EMAIL PROTECTED]