Hi,

Don't count on any of the code above. If you have a look at any of the
ProWesS executables, QD etc, they can actually be loaded both as resident
extension (they will link in as executable thing) or be executed? So they
are strictly speaking resident extensions but have a different header. Many
other extensions will also fall in this category (like hot_rext, ptr_gen,
wman). Then there are the extensions which do some other chores before they
link in their Sbasic keywords. There is no way you can count on the starting
code of a resident extension. You can only be sure it isn't on if it starts
with illegal opcodes.

Joachim

----- Original Message -----
From: "Robert Newson" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Sunday, July 01, 2001 11:59 PM
Subject: Re: [ql-users] Program type Identification


> > >Executables can be tested via the FTYP function (type 1 is executable)
> > >of Toolkit 2.
> >
> > Yes, they could also be identified (and some more interesting info
gleaned)
> > from the first couple of bytes, the executable header. Don't remember
the
> > definition of the top of my head, but I know hex 4AFB appears in it :-)
>
> It's only a 'suggestion' (that most [commercial] programs obey), code
> will still execute if it doesn't have this format - it's just that
> extensions (like 'JOBS') will not be able to display any 'job name'.
>
> When a program is EXEC'd it starts executing with the first byte of the
> file.  The suggestion was that the program should start:
>
>   00:  xx xx xx xx xx xx xx 4A FB
>   08:  LL LL nn nn nn nn nn nn nn
>   10:  nn ....
>
> where xx = executable code (usually it's just a BRA[.S] instruction =
> $60 ..), LLLL = the length of the program name (.W, usually 00LL), nn =
> the bytes of the name, eg:
>
>   00:  60 00 04 E0 00 00 4A FB �.....J.
>   08:  00 06 45 64 69 74 6F 72 ..Editor
>   10:  6D 64 76 32 5F 00 00 7E mdv2_..~
>   etc
>
> is the start of my file editor.  On 'JOBS', this appears as:
>
> Job tag   owner priority
> 0   0     0     32
> 4   5     0    s40   Editor
>
> > Resident extensions cannot be recognized as they are just pieces of
code,
> > they are called after they are loaded (LRESPR), but don't have any
defined
> > headers etc.
>
> Although there is no defined header, they usually start with code that
> links the next names in and then exits, and looks something like:
>
>    00: 43 FA 00 0C        LEA    table,A1
>    04: 34 78 01 10        MOVE.W $0110,A2
>    08: 4E 92              JSR    (A2)
>    0A: 70 00              MOVEQ  #$00,D0
>    0C: 4E 75              RTS
>    10: 00 nn        table DC.W   4        ; Number of PROCs
>    12: oo oo              DC.W   proc1-*  ; offset to 1st proc code
>    14: 00 LL              DC.W   5        ; length of name
>    16: 70 72 6F 63 49     DC.B   'proc1'  ; name of 1st proc
>    1B: 00                 ALIGN           ; Words must be on even
> boundaries
>    1C: .....              <rest of proc defn's>
>
> Tho' the LEA and MOVE.W may be the other way round, in which case the
> file will start:
>
>    00: 34 78 01 10        MOVE.W $0110,A2
>    04: 43 FA 00 08        LEA    table,A1
>
> But when you get to pure executable code as opposed to a job (eg the
> Breakout game that came with the QL), there's no defined standard or
> suggestion, so good luck.
>
> Robert
>
>

Reply via email to