Make sure the import directory is not in shared memory.

diff --git a/memory/virtual.c b/memory/virtual.c
index 7960f91..1ecbfb6 100644
--- a/memory/virtual.c
+++ b/memory/virtual.c
@@ -502,6 +502,7 @@
     IMAGE_DOS_HEADER *dos;
     IMAGE_NT_HEADERS *nt;
     IMAGE_SECTION_HEADER *sec;
+    IMAGE_DATA_DIRECTORY *imports;
     int i, pos;
     DWORD err = GetLastError();
     FILE_VIEW *view;
@@ -536,6 +537,9 @@
     sec = (IMAGE_SECTION_HEADER*)((char*)&nt->OptionalHeader+nt->FileHeader.SizeOfOptionalHeader);
     if ((char *)(sec + nt->FileHeader.NumberOfSections) > ptr + header_size) goto error;
 
+    imports = nt->OptionalHeader.DataDirectory + IMAGE_DIRECTORY_ENTRY_IMPORT;
+    if (!imports->Size || !imports->VirtualAddress) imports = NULL;
+
     /* check the architecture */
 
     if (nt->FileHeader.Machine != IMAGE_FILE_MACHINE_I386)
@@ -595,6 +599,19 @@
                 ERR_(module)( "Could not map shared section %.8s\n", sec->Name );
                 goto error;
             }
+
+            /* check if the import directory falls inside this section */
+            if (imports && imports->VirtualAddress >= sec->VirtualAddress &&
+                imports->VirtualAddress < sec->VirtualAddress + size)
+            {
+                DWORD base = imports->VirtualAddress & ~page_mask;
+                DWORD end = imports->VirtualAddress + ROUND_SIZE( imports->VirtualAddress,
+                                                                  imports->Size );
+                if (end > sec->VirtualAddress + size) end = sec->VirtualAddress + size;
+                if (end > base) VIRTUAL_mmap( shared_fd, ptr + base, end - base,
+                                              pos, 0, PROT_READ|PROT_WRITE|PROT_EXEC,
+                                              MAP_PRIVATE|MAP_FIXED, NULL );
+            }
             pos += size;
             continue;
         }