Regression on ntdll:map_image function

Carlos Lozano clozano at andago.com
Mon Nov 10 15:02:50 CST 2003


Hello,

The patch:
http://www.winehq.org/hypermail/wine-cvs/2003/11/0011.html
>Fixed type and protection values returned by NtQueryVirtualMemory to
>be closer to what Windows does.
>Allow using MEM_SYSTEM without MEM_RESERVE to avoid 64k alignment.
>Use pread instead of lseek+read when faking mmap

Made what the "Hot potatoes" program installer doesn't work.
http://web.uvic.ca/hrd/halfbaked/winhotpot60_beta.zip

Now when you run the installer, it says in a dialog:
"Access violation at address 0040C54A. Write of address 00400000"

The problem happens in this line of the patch:

-    if (!(view = VIRTUAL_CreateView( ptr, total_size, 0, VPROT_COMMITTED|VPROT_READ, hmapping )))
+    if (!(view = VIRTUAL_CreateView( ptr, total_size, 0,
+                                     VPROT_COMMITTED | VPROT_READ | VPROT_WRITE |
+                                     VPROT_EXEC | VPROT_WRITECOPY | VPROT_IMAGE, hmapping )))

It works fine, if you remove the flags VPROT_WRITE and VPROT_WRITECOPY.

Relay log, from the working version:

0009:Call comctl32.InitCommonControls() ret=00406879
0009:Ret  comctl32.InitCommonControls() retval=401cba82 ret=00406879
0009:Call user32.GetSystemMetrics(0000002a) ret=0040688e
0009:Ret  user32.GetSystemMetrics() retval=00000000 ret=0040688e
0009:Call kernel32.GetSystemInfo(407afe74) ret=0040c567
0009:Ret  kernel32.GetSystemInfo() retval=00000000 ret=0040c567
0009:Call kernel32.VirtualQuery(00400000,407afe98,0000001c) ret=0040c572
0009:Ret  kernel32.VirtualQuery() retval=0000001c ret=0040c572
0009:Call kernel32.VirtualProtect(00400000,00001000,00000040,407afe70) ret=0040c5b3
0009:Ret  kernel32.VirtualProtect() retval=00000001 ret=0040c5b3
0009:Call kernel32.VirtualProtect(00400000,00001000,00000002,407afe70) ret=0040c5e5
0009:Ret  kernel32.VirtualProtect() retval=00000001 ret=0040c5e5
0009:Call kernel32.VirtualQuery(00401000,407afe98,0000001c) ret=0040c5f5

Relay log, from the non working version:

0009:Call comctl32.InitCommonControls() ret=00406879
0009:Ret  comctl32.InitCommonControls() retval=401cb9c6 ret=00406879
0009:Call user32.GetSystemMetrics(0000002a) ret=0040688e
0009:Ret  user32.GetSystemMetrics() retval=00000000 ret=0040688e
0009:Call kernel32.GetSystemInfo(4069fe74) ret=0040c567
0009:Ret  kernel32.GetSystemInfo() retval=00000000 ret=0040c567
0009:Call kernel32.VirtualQuery(00400000,4069fe98,0000001c) ret=0040c572
0009:Ret  kernel32.VirtualQuery() retval=0000001c ret=0040c572
0009:Call user32.LoadStringA(00400000,0000ffa6,4069f604,00000400) ret=00404ef6

Here is starting to load the message error. Before of this point the 2
relay logs, was very similar (vimdiff was a great help :)

Thanks,
Regards,
Carlos.

-- 
 ___         _          \  |  /  Consulting
| . |._ _  _| | ___  ___  ___    http://www.andago.com
|   || ' |/ . |<_> |/ . |/ . \__ GNU/Linux
|_|_||_|_|\___|<___|\_. |\___/     _ \  __|\ \  /
 Carlos A. Lozano   <___'/ | \ -_) __/\__ \ >  <  -_)
 [ carlos.lozano at andago.com ]\___|_|  ____/ _/\_\___|
 [ calb at epsxe.com           ]  http://www.ePSXe.com



More information about the wine-devel mailing list