Ignore the delay load directory size

Dmitry Timoshkov dmitry at baikal.ru
Wed Oct 5 08:55:39 CDT 2005


Hello,

my tests show that the code generated by the MSVC6 compiler doesn't rely
on the delay load directory size, just like the PE loader doesn't rely
on the import directory size.

Changelog:
    Dmitry Timoshkov <dmitry at codeweavers.com>
    Ignore the delay load directory size.

--- cvs/hq/wine/tools/winedump/pe.c	Wed Oct 05 02:38:42 2005
+++ wine/tools/winedump/pe.c	Wed Oct 05 13:10:34 2005
@@ -583,7 +583,6 @@ static void dump_dir_delay_imported_func
         DWORD pUnloadIAT;
         DWORD dwTimeStamp;
     } *importDesc = get_dir(IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT);
-    unsigned nb_imp, i;
     DWORD directorySize;
 
     if (!importDesc) return;
@@ -597,22 +596,16 @@ static void dump_dir_delay_imported_func
         IMAGE_OPTIONAL_HEADER32 *opt = (IMAGE_OPTIONAL_HEADER32 *)&PE_nt_headers->OptionalHeader;
         directorySize = opt->DataDirectory[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT].Size;
     }
-    nb_imp = directorySize / sizeof(*importDesc);
-    if (!nb_imp) return;
 
     printf("Delay Import Table size: %08lx\n", directorySize); /* FIXME */
 
-    for (i = 0; i < nb_imp - 1; i++) /* the last descr is set as 0 as a sentinel */
+    for (;;)
     {
         BOOL use_rva = importDesc->grAttrs & 1;
         IMAGE_THUNK_DATA32 *il;
 
-        if (!importDesc->szName || !importDesc->pIAT || !importDesc->pINT)
-        {
-            /* FIXME */
-            printf("<<<<<<<null entry\n");
-            break;
-        }
+        if (!importDesc->szName || !importDesc->pIAT || !importDesc->pINT) break;
+
         printf("  grAttrs %08lx offset %08lx %s\n", importDesc->grAttrs, Offset(importDesc),
                use_rva ? (char *)RVA(importDesc->szName, sizeof(DWORD)) : (char *)importDesc->szName);
         printf("  Hint/Name Table: %08lx\n", importDesc->pINT);
@@ -624,16 +617,15 @@ static void dump_dir_delay_imported_func
         il = use_rva ? (IMAGE_THUNK_DATA32 *)RVA(importDesc->pINT, sizeof(DWORD)) : (IMAGE_THUNK_DATA32 *)importDesc->pINT;
 
         if (!il)
-        {
             printf("Can't grab thunk data, going to next imported DLL\n");
-            continue;
-        }
-
-        if (PE_nt_headers->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
-            dump_image_thunk_data64((IMAGE_THUNK_DATA64 *)il);
         else
-            dump_image_thunk_data32(il);
-        printf("\n");
+        {
+            if (PE_nt_headers->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
+                dump_image_thunk_data64((IMAGE_THUNK_DATA64 *)il);
+            else
+                dump_image_thunk_data32(il);
+            printf("\n");
+        }
         importDesc++;
     }
     printf("\n");






More information about the wine-patches mailing list