PE loading fixes

Andrew Lewycky andrew at transgaming.com
Fri Nov 23 14:30:54 CST 2001


ChangeLog:
	* loader/pe_image.c:
	do_relocations: process relocation blocks with a VirtualAddress 	of 0,
stop once SizeOfBlock == 0.

	* memory/virtual.c:
	map_image: map the PE header readonly.

Andrew
andrew at transgaming.com

-------------- next part --------------
Index: loader/pe_image.c
===================================================================
RCS file: /home/wine/wine/loader/pe_image.c,v
retrieving revision 1.100
diff -u -p -r1.100 pe_image.c
--- loader/pe_image.c	2001/10/25 19:52:12	1.100
+++ loader/pe_image.c	2001/11/23 18:43:16
@@ -401,7 +401,7 @@ static int do_relocations( char *base, c
     if ((nt->OptionalHeader.ImageBase & 0x80000000) && !((DWORD)base & 0x80000000))
         ERR( "Forced to relocate system DLL (base > 2GB). This is not good.\n" );
 
-    for ( ; ((char *)rel < base + dir->VirtualAddress + dir->Size) && rel->VirtualAddress;
+    for ( ; ((char *)rel < base + dir->VirtualAddress + dir->Size) && rel->SizeOfBlock;
           rel = (IMAGE_BASE_RELOCATION*)((char*)rel + rel->SizeOfBlock))
     {
         char *page = base + rel->VirtualAddress;
Index: memory/virtual.c
===================================================================
RCS file: /home/wine/wine/memory/virtual.c,v
retrieving revision 1.70
diff -u -p -r1.70 virtual.c
--- memory/virtual.c	2001/11/06 20:57:23	1.70
+++ memory/virtual.c	2001/11/23 18:43:16
@@ -512,7 +512,7 @@ static LPVOID map_image( HANDLE hmapping
 
     /* map the header */
 
-    if (VIRTUAL_mmap( fd, ptr, header_size, 0, 0, PROT_READ | PROT_WRITE,
+    if (VIRTUAL_mmap( fd, ptr, header_size, 0, 0, PROT_READ,
                       MAP_PRIVATE | MAP_FIXED, &removable ) == (char *)-1) goto error;
     dos = (IMAGE_DOS_HEADER *)ptr;
     nt = (IMAGE_NT_HEADERS *)(ptr + dos->e_lfanew);


More information about the wine-patches mailing list