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