delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1999/10/18/22:12:48

Date: Mon, 18 Oct 1999 19:56:33 -0500 (CDT)
From: Dave Dribin <drib AT enteract DOT com>
To: Eli Zaretskii <eliz AT is DOT elta DOT co DOT il>
cc: djgpp AT delorie DOT com
Subject: Re: spawnvpe hanging and bash GPF after running non-DJGPP exe
In-Reply-To: <Pine.SUN.3.91.991018103223.3777J-100000@is>
Message-ID: <Pine.NEB.3.96.991018194616.27526A-100000@shell-3.enteract.com>
MIME-Version: 1.0
Reply-To: djgpp AT delorie DOT com
X-Mailing-List: djgpp AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

On Mon, 18 Oct 1999, Eli Zaretskii wrote:

> 
> On Sun, 17 Oct 1999, Dave Dribin wrote:
> 
> > This particular game is Callus.  You are correct that it is a
> > protected-mode program.  This is what it displays at startup:
> > 
> > PMODE/W DOS Extender v1.33
> 
> Sigh...  This is a known problem with (at least some versions of)
> PMODE/W: it doesn't seem to unhook Int 31h on exit, leaving it to
> point to void.

Doh!

> > Finding a replacement is difficult.
> 
> Try to find a different (newer?) version of PMODE/W.  If PMODE/W is
> actively supported by its vendor, try mailing them or looking at their
> Web site.

No go.  Couldn't find anything newer than 1.33.  I did find older
versions, though.

I did manage to rebind the EXE against DOS4GW 1.97.  It runs from a
straight DOS shell, but now crashes right away when launched from
bash.  Bash doesn't die this time, but the program is never run.
Here's the dump:

DOS/4GW Protected Mode Run-time  Version 1.97
Copyright (c) Rational Systems, Inc. 1990-1994
DOS/4GW error (2001): exception 0Eh (page fault) at 25F:102DEFFB
TSF32: prev_tsf32 5290
SS       267 DS       267 ES       267 FS         0 GS        E7
EAX        0 EBX 102E9960 ECX 102E9B60 EDX 102E97C4
ESI 102E9B78 EDI 102E9CB0 EBP 102EA068 ESP 10662B44
CS:IP  25F:102DEFFB ID 0E COD        6 FLG    13246
CS=  25F, USE32, page granular, limit FFFFFFFF, base        0, acc CFFB
SS=  267, USE32, page granular, limit FFFFFFFF, base        0, acc CFF3
DS=  267, USE32, page granular, limit FFFFFFFF, base        0, acc CFF3
ES=  267, USE32, page granular, limit FFFFFFFF, base        0, acc CFF3
FS=    0, USE16, byte granular, limit        0, base        0, acc  0
GS=   E7, USE16, byte granular, limit     FFFF, base    46A90, acc F3
CR0: unavailable
Crash address (unrelocated) = 1:00009FFB


Maybe DOS4GW 2.01 will help?  I couldn't find it available anywhere,
though.

> > Is there anything the launching program can do to save and restore
> > Int 31h?
>
> Sadly, no.  Since restoring an interrupt vector requires a call to
> another function of Int 31h, this is a catch-22.

Darn!  Well how does this program trample Int 31h?  If they can
trample it, can't I restore it?  Or do they trample Int 31h using an
Int 31h (before it got trampled)?

Hmmm...  it's looking like the only way to do this is to write a
16-bit real mode application?  What tools are available for this kind
of task?  Only NASM?

Thanx for your help!

-Dave


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019