debugging longman dictionary

Laurent Pinchart laurent.pinchart at skynet.be
Mon Mar 25 14:22:34 CST 2002


On Monday 25 March 2002 07:31, Eric Pouech wrote:
> > I'd try to implement support for that in wine, but I don't know where to
> > look... I basically need to be able to read/write the interrupt vector
> > table (for int 0x00 here), AND to execute the modified interrupt vector
> > when a division by 0 is executed. Any idea ?
>
> I'm not sure we're really want to inject this type of support in the
> wine tree (very specific, bound to old windows architecture...)
> (this holds true for the DR? support patch)
>
> what I'd do is:
> - simulate (as for DR?) the IDTR read/write (memory/instr)
> - provide our own interrupt table
> - then hook the signal catches to this table (dlls/ntdll/
> - in your case, especially the divide by 0 signal to entry 1 of this
> table
>
> however, I don't think this is the best way to go. It will add lots of
> code to Wine (mainly i386 virtualization), and let programs modify
> things
> they shouldn't normally need to touch.
>
> I'd rather try to test with the NT mode, which shouldn't toy with all
> those parts

I agree with you. I tried NT mode, but unfortunately I'm not sucessful here 
either.

I ran into 3 problems:
1 - NtQueryInformationProcess
2 - int 0x01
3 - Secdrv.vxd

1 - NtQueryInformationProcess is a stub, except when called with 
ProcessInformationClass set to ProcessDebugPort, which is exactly what the 
copy protection does :-), so this is not really a problem. BTW, I found this 
link on the MSDN website while searching for some doc about 
NtQueryInformationProcess

http://msdn.microsoft.com/msdn-files/026/002/137/NTDLL/Source 
Files/ntdll_cpp.asp

Unfortunately the server returns an error, but it might be worth 
investigating :-)

2 - int 0x01 is called from within a try{} block (if I read the assembly code 
correctly), and the copy protection code seems to be looking for a side 
effect: the debugger detection returns false (no debugger present) if some 
memory location (0x00435b90), which has been initialized with the value -1, 
contains 0xc0000005 upon completion of int 0x01. Does this ring a bell to 
someone ?

3 - fixme:win32:DEVICE_Open Unknown/unsupported VxD Secdrv. Try --winver nt40 
or win31 !
I haven't been ablt to find any Secdrv.vxd, but there's a secdrv.sys on the 
CD... Should I disassembly it and add the code to wine ? :-)

Laurent Pinchart



More information about the wine-devel mailing list