[prev in list] [next in list] [prev in thread] [next in thread]
List: wine-devel
Subject: Problems while snooping
From: Uwe Bonnes <bon () elektron ! ikp ! physik ! tu-darmstadt ! de>
Date: 1999-07-29 21:19:44
[Download RAW message or body]
Hallo ,
I tried running win95 winhlp32,exe with native DLLs
(-dll user,user32,shell32,shell,commdlg,comdlg32,commctrl,comctl32=n).
When running with -debugmsg +relay,+snoop, I get a crash in following
code
00425E91 6A00 push 00000000
00425E93 6A00 push 00000000
00425E95 8B1D74C84300 mov ebx, dword ptr [USER32.CreateWindowExA]
00425E9B 6800003040 push 40300000
00425EA0 6A00 push 00000000
00425EA2 FF35EC844300 push dword ptr [loc_004384EC]
00425EA8 6A00 push 00000000
00425EAA FFD3 call ebx
Ret USER32.83: CreateWindowExA(00000200,004251f0 "MS_WINDOC",40d60cf4 \
"Windows-Hilfe",02cf0000,00000000,00000000,000 \
00000,00000000,00000000,00000000,00400000,00000000) retval = 0000008c ret=00425e45 \
fs=070f Call USER32.83: CreateWindowExA(00000000,004385d8 "MS_WINTOPIC",00000000,Call \
KERNEL32.702: UnhandledExceptionFilter( 40d3f728) ret=00435742 fs=070f
Unhandled exception: page fault on read access to 0x40300000 in 32-bit code \
(0x081735b0). Loading symbols: wine /usr/X11R6/lib/libSM.so.6 \
/usr/X11R6/lib/libICE.so.6 /usr/X11R6/lib/libXpm.so.4 /usr/lib/libMesaGL.so.3
/usr/X11R6/lib/libXext.so.6 /usr/X11R6/lib/libX11.so.6
/lib/libncurses.so.4 /lib/libm.so.6 /lib/libdl.so.2 /lib/libc.so.6
/lib/ld-linux.so.2
DDEML COMM MOUSE KEYBOARD USER GDI KERNEL WINEPS WPROCS DISPLAY SYSTEM
WINHLP32.EXE ADVAPI32 USER32.dll GDI32 KERNEL32 NTDLL
In 32 bit mode.
Register dump:
CS:0023 SS:002b DS:002b ES:002b FS:070f GS:0000
EIP:081735b0 ESP:40d3fa04 EBP:40d3fa14 EFLAGS:00010207( R- 00 I - -P1C)
EAX:00000041 EBX:40300000 ECX:00000000 EDX:0000004f
ESI:00000000 EDI:08420238
Stack dump:
0x40d3fa04 (GDI32.WidenPath+0x58df58): 40300000 00000000 40300000 00000000
0x40d3fa14 (GDI32.WidenPath+0x58df68): 40d3fa4c 0823be81 40300000 00000050
0x40d3fa24 (GDI32.WidenPath+0x58df78): 00000003 0000000c 40d3fa80 40300000
0x40d3fa34 (GDI32.WidenPath+0x58df88): 40300000 0000004f 00001000 00001000
0x40d3fa44 (GDI32.WidenPath+0x58df98): 00000001 00020000 40d3fa74 0823c1bd
0x40d3fa54 (GDI32.WidenPath+0x58dfa8): 40300000 08345840 082424c9 00000000
0x40d3fa64 (GDI32.WidenPath+0x58dfb8):
00e1: sel=070f base=4050eea8 limit=00000fff 32-bit rw-
Backtrace:
=>0 0x081735b0 (IsBadStringPtrA+0xa0 [virtual.c:1009]) (ebp=40d3fa14)
1 0x0823be81 (SNOOP_PrintArg+0x51(x=0x40300000) [snoop.c:217]) (ebp=40d3fa4c)
2 0x0823c1bd (__regs_SNOOP_Entry+0x23d(context=0x40d3fa80) [snoop.c:327]) \
(ebp=40d3fa74) 3 0x0823c9d2 (CALL32_Regs+0xb6 [call32.s]) (ebp=40d3fbcc)
4 0x082424c9 (SNOOP_Entry+0x5) (ebp=40d3fee8)
5 0x00426de3 (WINHLP32.EXE..text+0x25de3) (ebp=40d3ffbc)
6 0x08249cb8 (PROCESS_Start+0x438 [process.c:383]) (ebp=40d3ffe4)
7 0x0824b917 (SYSDEPS_StartThread+0x17(teb=0x4050eea8) [sysdeps.c:135]) \
(ebp=40d3fff4) 8 0x402c743e (thread_start+0x4 [sysctl.c]) (ebp=00000000)
*** Invalid address 0x00000000 (DateStyle)
0x081735b0 (IsBadStringPtrA+0xa0 [virtual.c:1009]): movb 0x0(%ebx),%al
I have tried to case that case in SNOOP_PrintArgs with
...
if (IsBadReadPtr(x,4))
{
sprintf(buf,"%08lx",x);
return buf;
}
i=0;nostring=0;
if (!IsBadStringPtrA((LPSTR)x,80)) {
but to no avail. any ideas?
Bye
Uwe Bonnes bon@elektron.ikp.physik.tu-darmstadt.de
Free Software: If you contribute nothing, expect nothing
--
PS:
My files contain additional Debuginfo. Here the files with their linenumbers:
snoop.c:
217 if (!IsBadStringPtrA((LPSTR)x,80)) {
218 while (i<80) {
219 LPBYTE s=(LPBYTE)x;
220
221 if (s[i]==0) break;
222 if (s[i]<0x20) {nostring=1;break;}
223 if (s[i]>=0x80) {nostring=1;break;}
224 i++;
225 }
323 DPRINTF("Call %s.%ld: %s(",dll->name,ordinal,fun->name);
324 if (fun->nrofargs>0) {
325 max = fun->nrofargs; if (max>16) max=16;
326 for (i=0;i<max;i++)
327 \
DPRINTF("%s%s",SNOOP_PrintArg(*(DWORD*)(ESP_reg(context)+4+sizeof(DWORD)*i)),(i<fun- \
327 >nrofargs-1)?",":""); 328 if (max!=fun->nrofargs)
329 DPRINTF(" ...");
330 } else if (fun->nrofargs<0) {
331 DPRINTF("<unknown, check return>");
332 ret->args = HeapAlloc(SystemHeap,0,16*sizeof(DWORD));
333 \
memcpy(ret->args,(LPBYTE)(ESP_reg(context)+4),sizeof(DWORD)*16); 334 }
virtual.c:
987 BOOL WINAPI IsBadStringPtrA(
988 LPCSTR str, /* [in] Address of string */
989 UINT max /* [in] Maximum size of string */
990 ) {
991 FILE_VIEW *view;
992 UINT page, count;
993
994 TRACE("%p %d\n",str,max);
995
996 if (!max) return FALSE;
997 if (IsBadReadPtr(str,1)) return TRUE;
998 if (!(view = VIRTUAL_FindView( (UINT)str ))) return TRUE;
999 page = ((UINT)str - view->base) >> page_shift;
1000 count = page_mask + 1 - ((UINT)str & page_mask);
1001
1002 while (max)
1003 {
1004 if ((view->prot[page] & (VPROT_READ | VPROT_COMMITTED)) !=
1005 (VPROT_READ | \
VPROT_COMMITTED)) 1006 return TRUE;
1007 if (count > max) count = max;
1008 max -= count;
1009 while (count--) if (!*str++) return FALSE;
1010 if (++page >= view->size >> page_shift) return TRUE;
1011 count = page_mask + 1;
1012 }
1013 return FALSE;
1014 }
=========================================================================
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic