Make snoop code take ordinal base into account.
This commit is contained in:
parent
9650c2baea
commit
9abd5530c8
|
@ -6,7 +6,7 @@
|
|||
|
||||
#include "module.h"
|
||||
|
||||
extern void SNOOP_RegisterDLL(HMODULE,LPCSTR,DWORD);
|
||||
extern void SNOOP_RegisterDLL(HMODULE,LPCSTR,DWORD,DWORD);
|
||||
extern FARPROC SNOOP_GetProcAddress(HMODULE,LPCSTR,DWORD,FARPROC);
|
||||
extern void SNOOP16_RegisterDLL(NE_MODULE*,LPCSTR);
|
||||
extern FARPROC16 SNOOP16_GetProcAddress16(HMODULE16,DWORD,FARPROC16);
|
||||
|
|
|
@ -162,7 +162,7 @@ WINE_MODREF *ELF_LoadLibraryExA( LPCSTR libname, DWORD flags)
|
|||
|
||||
hmod = ELF_CreateDummyModule( t, modname );
|
||||
|
||||
SNOOP_RegisterDLL(hmod,libname,STUBSIZE/sizeof(ELF_STDCALL_STUB));
|
||||
SNOOP_RegisterDLL(hmod,libname,0,STUBSIZE/sizeof(ELF_STDCALL_STUB));
|
||||
|
||||
wm = PE_CreateModule( hmod, libname, 0, 0, FALSE );
|
||||
wm->find_export = ELF_FindExportedFunction;
|
||||
|
|
|
@ -115,13 +115,13 @@ void dump_exports( HMODULE hModule )
|
|||
}
|
||||
}
|
||||
|
||||
/* Look up the specified function or ordinal in the exportlist:
|
||||
/* Look up the specified function or ordinal in the export list:
|
||||
* If it is a string:
|
||||
* - look up the name in the Name list.
|
||||
* - look up the name in the name list.
|
||||
* - look up the ordinal with that index.
|
||||
* - use the ordinal as offset into the functionlist
|
||||
* If it is a ordinal:
|
||||
* - use ordinal-pe_export->Base as offset into the functionlist
|
||||
* If it is an ordinal:
|
||||
* - use ordinal-pe_export->Base as offset into the function list
|
||||
*/
|
||||
static FARPROC PE_FindExportedFunction(
|
||||
WINE_MODREF *wm, /* [in] WINE modreference */
|
||||
|
@ -656,7 +656,7 @@ WINE_MODREF *PE_CreateModule( HMODULE hModule, LPCSTR filename, DWORD flags,
|
|||
}
|
||||
|
||||
if (pe_export)
|
||||
SNOOP_RegisterDLL( hModule, wm->modname, pe_export->NumberOfFunctions );
|
||||
SNOOP_RegisterDLL( hModule, wm->modname, pe_export->Base, pe_export->NumberOfFunctions );
|
||||
|
||||
/* Send DLL load event */
|
||||
/* we don't need to send a dll event for the main exe */
|
||||
|
|
|
@ -59,6 +59,7 @@ typedef struct tagSNOOP_DLL {
|
|||
HMODULE hmod;
|
||||
SNOOP_FUN *funs;
|
||||
LPCSTR name;
|
||||
DWORD ordbase;
|
||||
DWORD nrofordinals;
|
||||
struct tagSNOOP_DLL *next;
|
||||
} SNOOP_DLL;
|
||||
|
@ -126,7 +127,7 @@ int SNOOP_ShowDebugmsgSnoop(const char *dll, int ord, const char *fname) {
|
|||
}
|
||||
|
||||
void
|
||||
SNOOP_RegisterDLL(HMODULE hmod,LPCSTR name,DWORD nrofordinals) {
|
||||
SNOOP_RegisterDLL(HMODULE hmod,LPCSTR name,DWORD ordbase,DWORD nrofordinals) {
|
||||
SNOOP_DLL **dll = &(firstdll);
|
||||
char *s;
|
||||
|
||||
|
@ -139,6 +140,7 @@ SNOOP_RegisterDLL(HMODULE hmod,LPCSTR name,DWORD nrofordinals) {
|
|||
*dll = (SNOOP_DLL*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SNOOP_DLL));
|
||||
(*dll)->next = NULL;
|
||||
(*dll)->hmod = hmod;
|
||||
(*dll)->ordbase = ordbase;
|
||||
(*dll)->nrofordinals = nrofordinals;
|
||||
(*dll)->name = HEAP_strdupA(GetProcessHeap(),0,name);
|
||||
if ((s=strrchr((*dll)->name,'.')))
|
||||
|
@ -322,7 +324,7 @@ void WINAPI SNOOP_DoEntry( CONTEXT86 *context )
|
|||
|
||||
context->Eip = (DWORD)fun->origfun;
|
||||
|
||||
DPRINTF("%08lx:CALL %s.%ld: %s(",GetCurrentThreadId(),dll->name,ordinal,fun->name);
|
||||
DPRINTF("%08lx:CALL %s.%ld: %s(",GetCurrentThreadId(),dll->name,dll->ordbase+ordinal,fun->name);
|
||||
if (fun->nrofargs>0) {
|
||||
max = fun->nrofargs; if (max>16) max=16;
|
||||
for (i=0;i<max;i++)
|
||||
|
@ -355,7 +357,7 @@ void WINAPI SNOOP_DoReturn( CONTEXT86 *context )
|
|||
|
||||
DPRINTF("%08lx:RET %s.%ld: %s(",
|
||||
GetCurrentThreadId(),
|
||||
ret->dll->name,ret->ordinal,ret->dll->funs[ret->ordinal].name);
|
||||
ret->dll->name,ret->dll->ordbase+ret->ordinal,ret->dll->funs[ret->ordinal].name);
|
||||
max = ret->dll->funs[ret->ordinal].nrofargs;
|
||||
if (max>16) max=16;
|
||||
|
||||
|
@ -368,7 +370,7 @@ void WINAPI SNOOP_DoReturn( CONTEXT86 *context )
|
|||
} else
|
||||
DPRINTF("%08lx:RET %s.%ld: %s() retval = %08lx ret=%08lx tid=%08lx\n",
|
||||
GetCurrentThreadId(),
|
||||
ret->dll->name,ret->ordinal,ret->dll->funs[ret->ordinal].name,
|
||||
ret->dll->name,ret->dll->ordbase+ret->ordinal,ret->dll->funs[ret->ordinal].name,
|
||||
context->Eax, (DWORD)ret->origreturn, GetCurrentThreadId());
|
||||
ret->origreturn = NULL; /* mark as empty */
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue