CVS: winex/loader pe_image.c,1.20,1.21
[email protected] 31 Jul 2007 19:49:04 -0000
| Newsgroups | gmane.comp.emulators.winex.cvs |
|---|---|
| Message-ID | <[email protected]> |
Subject: winex/loader pe_image.c,1.20,1.21Update of /var/lib/cvsd/cvsroot/winex/loader
In directory agravaine:/tmp/cvs-serv796/loader
Modified Files:
pe_image.c
Log Message:
- reorganize PE_fixup_imports a bit by consolidating two sections
Index: pe_image.c
===================================================================
RCS file: /var/lib/cvsd/cvsroot/winex/loader/pe_image.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- pe_image.c 31 Jul 2007 19:48:55 -0000 1.20
+++ pe_image.c 31 Jul 2007 19:49:02 -0000 1.21
@@ -315,81 +315,50 @@
/* FIXME: forwarder entries ... */
- if (pe_imp->u.OriginalFirstThunk != 0) { /* original MS style */
- TRACE("Microsoft style imports used\n");
- import_list =(PIMAGE_THUNK_DATA) RVA(pe_imp->u.OriginalFirstThunk);
- thunk_list = (PIMAGE_THUNK_DATA) RVA(pe_imp->FirstThunk);
-
- while (import_list->u1.Ordinal) {
- if (IMAGE_SNAP_BY_ORDINAL(import_list->u1.Ordinal)) {
- int ordinal = IMAGE_ORDINAL(import_list->u1.Ordinal);
+ thunk_list = RVA (pe_imp->FirstThunk);
+ if (pe_imp->u.OriginalFirstThunk != 0) /* original MS style */
+ import_list = (PIMAGE_THUNK_DATA)RVA (pe_imp->u.OriginalFirstThunk);
+ else
+ import_list = thunk_list;
- TRACE("--- Ordinal %s,%d\n", name, ordinal);
- thunk_list->u1.Function=(PDWORD)MODULE_GetProcAddress(
- wmImp->module, (LPCSTR)ordinal, TRUE
- );
- if (!thunk_list->u1.Function) {
- ERR_(fixup)("No implementation for %s.%d imported from %s, setting to 0xdeadbeef\n",
- name, ordinal, wm->filename );
- thunk_list->u1.Function = (PDWORD)0xdeadbeef;
- }
- else
- TRACE_(fixup)("%s MS Ordinal Import %s.%d found\n", wm->filename, name, ordinal);
-
- } else { /* import by name */
- pe_name = (PIMAGE_IMPORT_BY_NAME)RVA(import_list->u1.AddressOfData);
- TRACE("--- %s %s.%d\n", pe_name->Name, name, pe_name->Hint);
- thunk_list->u1.Function=(PDWORD)MODULE_GetProcAddress(
- wmImp->module, (LPCSTR)pe_name->Name, TRUE
- );
- if (!thunk_list->u1.Function) {
- ERR_(fixup)("No implementation for %s.%d(%s) imported from %s, setting to 0xdeadbeef\n",
- name,pe_name->Hint,pe_name->Name,wm->filename);
- thunk_list->u1.Function = (PDWORD)0xdeadbeef;
- }
- else
- TRACE_(fixup)("%s MS Named Import %s.%d(%s) found\n", wm->filename, name, pe_name->Hint, pe_name->Name );
- }
- import_list++;
- thunk_list++;
- }
- } else { /* Borland style */
- TRACE("Borland style imports used\n");
- thunk_list = (PIMAGE_THUNK_DATA) RVA(pe_imp->FirstThunk);
- while (thunk_list->u1.Ordinal) {
- if (IMAGE_SNAP_BY_ORDINAL(thunk_list->u1.Ordinal)) {
- /* not sure about this branch, but it seems to work */
- int ordinal = IMAGE_ORDINAL(thunk_list->u1.Ordinal);
+ while (import_list->u1.Ordinal)
+ {
+ if (IMAGE_SNAP_BY_ORDINAL(import_list->u1.Ordinal))
+ {
+ int ordinal = IMAGE_ORDINAL(import_list->u1.Ordinal);
- TRACE("--- Ordinal %s.%d\n",name,ordinal);
- thunk_list->u1.Function=(PDWORD)MODULE_GetProcAddress(
- wmImp->module, (LPCSTR) ordinal, TRUE
- );
- if (!thunk_list->u1.Function) {
- ERR_(fixup)("No implementation for %s.%d imported from %s, setting to 0xdeadbeef\n",
- name,ordinal, wm->filename);
- thunk_list->u1.Function = (PDWORD)0xdeadbeef;
- }
- else
- TRACE_(fixup)("%s Borland Ordinal Import %s.%d found\n", wm->filename, name, ordinal);
- } else {
- pe_name=(PIMAGE_IMPORT_BY_NAME) RVA(thunk_list->u1.AddressOfData);
- TRACE("--- %s %s.%d\n",
- pe_name->Name,name,pe_name->Hint);
- thunk_list->u1.Function=(PDWORD)MODULE_GetProcAddress(
- wmImp->module, (LPCSTR)pe_name->Name, TRUE
- );
- if (!thunk_list->u1.Function) {
- ERR_(fixup)("No implementation for %s.%d(%s) imported from %s, setting to 0xdeadbeef\n",
- name, pe_name->Hint, pe_name->Name, wm->filename);
- thunk_list->u1.Function = (PDWORD)0xdeadbeef;
- }
- else
- TRACE_(fixup)("%s Borland Named Import %s.%d(%s) found\n", wm->filename, name, pe_name->Hint, pe_name->Name );
- }
- thunk_list++;
- }
- }
+ TRACE("--- Ordinal %s,%d\n", name, ordinal);
+ thunk_list->u1.Function =
+ (PDWORD)MODULE_GetProcAddress (wmImp->module, (LPCSTR)ordinal,
+ TRUE);
+ if (!thunk_list->u1.Function)
+ {
+ ERR_(fixup)("No implementation for %s.%d imported from %s, setting to 0xdeadbeef\n",
+ name, ordinal, wm->filename );
+ thunk_list->u1.Function = (PDWORD)0xdeadbeef;
+ }
+ else
+ TRACE_(fixup)("%s Ordinal Import %s.%d found\n", wm->filename, name, ordinal);
+ }
+ else
+ { /* import by name */
+ pe_name = (PIMAGE_IMPORT_BY_NAME)RVA(import_list->u1.AddressOfData);
+ TRACE("--- %s %s.%d\n", pe_name->Name, name, pe_name->Hint);
+ thunk_list->u1.Function =
+ (PDWORD)MODULE_GetProcAddress (wmImp->module,
+ (LPCSTR)pe_name->Name, TRUE);
+ if (!thunk_list->u1.Function)
+ {
+ ERR_(fixup)("No implementation for %s.%d(%s) imported from %s, setting to 0xdeadbeef\n",
+ name,pe_name->Hint,pe_name->Name,wm->filename);
+ thunk_list->u1.Function = (PDWORD)0xdeadbeef;
+ }
+ else
+ TRACE_(fixup)("%s Named Import %s.%d(%s) found\n", wm->filename, name, pe_name->Hint, pe_name->Name );
+ }
+ import_list++;
+ thunk_list++;
+ }
}
return r;
}