Skip to content
Snippets Groups Projects
Commit 9abd5530 authored by Andreas Mohr's avatar Andreas Mohr Committed by Alexandre Julliard
Browse files

Make snoop code take ordinal base into account.

parent 9650c2ba
No related branches found
No related tags found
No related merge requests found
......@@ -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 */
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment