• PRG57 - ‡ ¯¨áì ¤¥â «ì­®© ¨­ä®p¬ æ¨¨ ®¡ Exception'¥

    From FAQServer@2:5020/181 to All on Mon Sep 16 07:37:06 2024
    [Q]: ‡ ¯¨áì ¤¥â «ì­®© ¨­ä®p¬ æ¨¨ ®¡ Exception'¥

    [A]: George Shapovalov (2:5020/341.26)

    520 645³except3.zip

    EXCEPTQ in a 32 bit DLL which implements an exception handler which saves the registers in a file named xxxx.TRP (xxxx=Pid,Tid) together with the Loaded modules code and data objects addresses, and also the failing thread stack dump and the process status as given by DosQProcStatus. Trapperq is an IBM C/2 program which shows how to implement the call to 32 bits exception handler from a 16:16 bits program. enter Trapperq to generate a trap and the xxxx.TRP file. You are free to use that code as a sample for your programs. No support or guarantee from me implied.

    Cheers Marc Fiammante

    ‘ âp¥èª®© p ¡®â ¥â,   á ç¥â¢¥pª®© ¥é¥ ­¥ ᮡ¨p «. ®¨é¨ ­  审¡¥á å ¨«¨ ¢ ¤®¬¥©­¥ ¢ ¯p¨¬¥p å. …᫨ ­¥ ­ ©¤¥èì, ï ⥡¥ ­  ¥¬¥©« ª¨­y.
    ‚®â ¯p¨¬¥p p ¡®âë:

    #pragma handler(main)
    #pragma map (_Exception,"MYHANDLER")

    #include <stdio.h>
    #include <stdlib.h>

    void TrapFunc(void);

    main(){
    printf("Exception handler has been set by compiler\n");
    printf("Generating the TRAP from function\n");
    TrapFunc();
    }
    void TrapFunc() {
    char * Test;
    Test=0;
    *Test=0;
    }


    ‚®â ¯p¨¬¥p âp ¯-ä ©« :

    --------------------------
    Exception C0000005 Occurred
    at 00:03:17 02/09/100
    Invalid linear address 00000000

    OS/2 Version 2.40
    Failing code module internal name : SAMPLE
    Failing code module file name : E:\TEMP\SAMPLE.EXE
    Failing code Object # 1 at Offset 58
    File Line# Public Symbol
    ÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄ- ÄÄÄÄÄÄÄÄÄÄÄÄ-
    SAMPLE.C 44 TrapFunc (sample.obj) 0001:00000048
    List of auto variables at EBP 28854 in TrapFunc:
    Offset Name Type Value
    ÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4 Test near pointer to 8 bit unsigned 0x0 invalid


    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    ³ GS : 0000 FS : 150B ES : 0053 DS : 0053 ³
    ³ EDI : 00000000 ESI : 00000000 EAX : 00000000 EBX : 00000000 ³
    ³ ECX : 00000000 EDX : 00000004 ³
    ³ EBP : 00028854 EIP : 00010058 EFLG: 00012206 ESP : 00028850 ³
    ³ CS : 005B SS : 0053 ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

    Failing instruction at CS:EIP : 005B:00010058 is mov [eax],00


    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    ³ Register content analysis ³
    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
    ³ EAX does not point to valid memory ³
    ³ EBX does not point to valid memory ³
    ³ ECX does not point to valid memory ³
    ³ EDX does not point to valid memory ³
    ³ EDI does not point to valid memory ³
    ³ ESI does not point to valid memory ³
    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

    Thread slot 125 , Id 1 , priority 200
    Stack Bottom : 000208A0 (0017:08A0) ;Stack Top : 000288A0 (0017:88A0) Process Id : 201 .EXE name : E:\TEMP\SAMPLE.EXE

    Call Stack:
    Source Line Nearest
    EBP Address Module Obj# File Numbr Public Symbol
    ÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄ- ÄÄÄÄÄÄÄÄ ÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄ- ÄÄÄÄÄÄÄÄÄÄÄÄ-
    Trap -> 000F:0058 SAMPLE 0001 SAMPLE.C 44 TrapFunc (sample.obj) 0001:00000048

    00028854 :00010035 SAMPLE 0001 SAMPLE.C 39 main (sample.obj) 0001:00000000

    No auto variables found in main.

    0002886C :00010101 SAMPLE 0001 SAMPLE.C 45 __RunExitList (edcstrt.ASM) 0001:00000060

    List of auto variables at EBP 28888 in TrapFunc:
    Offset Name Type Value
    ÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4 Test near pointer to 8 bit unsigned 0x11150 unwritable

    00028888 DFDF:C098 DOSCALL1 0004
    Lost Stack chain - new EBP below previous

    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    ³ List of currently accessed modules (DLLs) object addresses ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
    ³ Module E:\TEMP\SAMPLE.EXE Handle 00004756 ³
    ³ Object Number Address Length Flags Type ³
    ³ 000000 00010000 00003D94 00010015 - 16:16 Selector 000F ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
    [ ...áꥤ¥­® ¬®«ìî... ] ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
    ³ Module D:\OS2\DLL\UCONV.DLL Handle 00000995 ³
    ³ Object Number Address Length Flags Type ³
    ³ 000000 1FCF0000 000059D9 00012015 - 16:16 Selector FE7F ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

    /*----- Stack Bottom ---*/

    /*----- Accessible Stack Bottom at 208A0 ---*/

    000208A0 :0000 0000 0000 0000 0000 0000 0000 0000 ................
    000208B0 : lines not printed same as above

    00027FE0 :5300 0000 AD65 F91B 0000 0500 0000 F87F S....e..........
    [ ...áꥤ¥­® ¬®«ìî... ]
    00028890 :9412 0000 0000 0000 0000 0300 8413 0300 ................
    /*----- Stack Top -----*/

    --- INN 2.7.2
    * Origin: This echo is READ-ONLY. Send %HELP to FAQSERVER at (2:5020/181)
  • From FAQServer@2:5020/181 to All on Sat Dec 21 07:37:06 2024
    [Q]: ‡ ¯¨áì ¤¥â «ì­®© ¨­ä®p¬ æ¨¨ ®¡ Exception'¥

    [A]: George Shapovalov (2:5020/341.26)

    520 645³except3.zip

    EXCEPTQ in a 32 bit DLL which implements an exception handler which saves the registers in a file named xxxx.TRP (xxxx=Pid,Tid) together with the Loaded modules code and data objects addresses, and also the failing thread stack dump and the process status as given by DosQProcStatus. Trapperq is an IBM C/2 program which shows how to implement the call to 32 bits exception handler from a 16:16 bits program. enter Trapperq to generate a trap and the xxxx.TRP file. You are free to use that code as a sample for your programs. No support or guarantee from me implied.

    Cheers Marc Fiammante

    ‘ âp¥èª®© p ¡®â ¥â,   á ç¥â¢¥pª®© ¥é¥ ­¥ ᮡ¨p «. ®¨é¨ ­  审¡¥á å ¨«¨ ¢ ¤®¬¥©­¥ ¢ ¯p¨¬¥p å. …᫨ ­¥ ­ ©¤¥èì, ï ⥡¥ ­  ¥¬¥©« ª¨­y.
    ‚®â ¯p¨¬¥p p ¡®âë:

    #pragma handler(main)
    #pragma map (_Exception,"MYHANDLER")

    #include <stdio.h>
    #include <stdlib.h>

    void TrapFunc(void);

    main(){
    printf("Exception handler has been set by compiler\n");
    printf("Generating the TRAP from function\n");
    TrapFunc();
    }
    void TrapFunc() {
    char * Test;
    Test=0;
    *Test=0;
    }


    ‚®â ¯p¨¬¥p âp ¯-ä ©« :

    --------------------------
    Exception C0000005 Occurred
    at 00:03:17 02/09/100
    Invalid linear address 00000000

    OS/2 Version 2.40
    Failing code module internal name : SAMPLE
    Failing code module file name : E:\TEMP\SAMPLE.EXE
    Failing code Object # 1 at Offset 58
    File Line# Public Symbol
    ÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄ- ÄÄÄÄÄÄÄÄÄÄÄÄ-
    SAMPLE.C 44 TrapFunc (sample.obj) 0001:00000048
    List of auto variables at EBP 28854 in TrapFunc:
    Offset Name Type Value
    ÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4 Test near pointer to 8 bit unsigned 0x0 invalid


    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    ³ GS : 0000 FS : 150B ES : 0053 DS : 0053 ³
    ³ EDI : 00000000 ESI : 00000000 EAX : 00000000 EBX : 00000000 ³
    ³ ECX : 00000000 EDX : 00000004 ³
    ³ EBP : 00028854 EIP : 00010058 EFLG: 00012206 ESP : 00028850 ³
    ³ CS : 005B SS : 0053 ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

    Failing instruction at CS:EIP : 005B:00010058 is mov [eax],00


    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    ³ Register content analysis ³
    ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
    ³ EAX does not point to valid memory ³
    ³ EBX does not point to valid memory ³
    ³ ECX does not point to valid memory ³
    ³ EDX does not point to valid memory ³
    ³ EDI does not point to valid memory ³
    ³ ESI does not point to valid memory ³
    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

    Thread slot 125 , Id 1 , priority 200
    Stack Bottom : 000208A0 (0017:08A0) ;Stack Top : 000288A0 (0017:88A0) Process Id : 201 .EXE name : E:\TEMP\SAMPLE.EXE

    Call Stack:
    Source Line Nearest
    EBP Address Module Obj# File Numbr Public Symbol
    ÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄ- ÄÄÄÄÄÄÄÄ ÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄ- ÄÄÄÄÄÄÄÄÄÄÄÄ-
    Trap -> 000F:0058 SAMPLE 0001 SAMPLE.C 44 TrapFunc (sample.obj) 0001:00000048

    00028854 :00010035 SAMPLE 0001 SAMPLE.C 39 main (sample.obj) 0001:00000000

    No auto variables found in main.

    0002886C :00010101 SAMPLE 0001 SAMPLE.C 45 __RunExitList (edcstrt.ASM) 0001:00000060

    List of auto variables at EBP 28888 in TrapFunc:
    Offset Name Type Value
    ÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4 Test near pointer to 8 bit unsigned 0x11150 unwritable

    00028888 DFDF:C098 DOSCALL1 0004
    Lost Stack chain - new EBP below previous

    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    ³ List of currently accessed modules (DLLs) object addresses ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
    ³ Module E:\TEMP\SAMPLE.EXE Handle 00004756 ³
    ³ Object Number Address Length Flags Type ³
    ³ 000000 00010000 00003D94 00010015 - 16:16 Selector 000F ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
    [ ...áꥤ¥­® ¬®«ìî... ] ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
    ³ Module D:\OS2\DLL\UCONV.DLL Handle 00000995 ³
    ³ Object Number Address Length Flags Type ³
    ³ 000000 1FCF0000 000059D9 00012015 - 16:16 Selector FE7F ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

    /*----- Stack Bottom ---*/

    /*----- Accessible Stack Bottom at 208A0 ---*/

    000208A0 :0000 0000 0000 0000 0000 0000 0000 0000 ................
    000208B0 : lines not printed same as above

    00027FE0 :5300 0000 AD65 F91B 0000 0500 0000 F87F S....e..........
    [ ...áꥤ¥­® ¬®«ìî... ]
    00028890 :9412 0000 0000 0000 0000 0300 8413 0300 ................
    /*----- Stack Top -----*/

    --- INN 2.7.3 (20241006 prerelease)
    * Origin: This echo is READ-ONLY. Send %HELP to FAQSERVER at (2:5020/181)