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]

Reply via email to