From: dundas@caltech.edu Sent: Monday, February 11, 2002 3:57 PM To: Info-VAX@Mvb.Saic.Com Subject: Re: Am I being debugged? Is this what you are looking for: .title isdebug - is image linked with debug information? .ident /28-Jan-1985/ .enabl debug .dsabl global .extrn jd_image_act, malloc, free, sys$open, sys$close, __fabr ; ; *** Edit History *** ; ; 12-Oct-1984 Original creation and testing. ; ; 28-Jan-1985 Use callg instead of calls for jd_image_act(). ; .library "sys$library:lib" $fabdef $ihddef $secdef .psect jd_ro_code, nowrt, pic, shr ; ; function bool isdebug ([str]) varargs ; char *str; /* optional */ ; ; If str is specified, it is the name of the file to ; check for debug enabled (no check is made to see ; if it is really an executable or not). If no ; argument is specified, the current image is ; checked. ; .entry isdebug, ^m tstb (ap) ; any args specified? bneq 20$ ; yes, different code callg (ap), g^jd_image_act ; get the local image activator stuff movl 20(r0), r0 ; get link flag information bbs #ihd$v_lnkdebug, r0, 10$ ; exit if set clrl r0 ; indicate none 10$: ret ; ... 20$: pushl #fab$k_bln ; stack the size of a fab calls #1, g^malloc ; allocate one on the fly movl r0, r6 ; save the address in a good reg bneq 30$ ; skip around if ok brw error ; exit on error 30$: movc3 #fab$k_bln, g^__fabr, (r6) ; copy a template readonly fab locc #0, #-1, @4(ap) ; find the null subl 4(ap), r1 ; compute the length cvtlb r1, fab$b_fns(r6) ; set the length movl 4(ap), fab$l_fna(r6) ; set the filename address bisl #fab$m_ufo, fab$l_fop(r6) ; set user file open pushl r6 ; stack the fab calls #1, g^sys$open ; open the file with RMS blbc r0, error1 ; exit on errors movab -16(sp), sp ; get local stack space movzwl #^x200, -4(fp) ; safe starting address in P0 space movzwl #^x200, -8(fp) ; same $crmpsc_s - ; map a section inadr = -8(fp), - retadr = -16(fp), - acmode = #0, - flags = #sec$m_expreg, - chan = fab$l_stv(r6), - pagcnt = #1, - ; only map 1 page pfc = #1 ; page fault cluster size of 1 blbc r0, error1 ; exit on errors movl -16(fp), r2 ; get the starting virtual address of section movl ihd$l_lnkflags(r2), r3 ; get link flags $deltva_s - ; delete what we created earlier inadr = -16(fp) pushl r6 ; stack the fab calls #1, g^sys$close ; close the fab pushl r6 ; stack the fab to return to pool mem calls #1, g^free ; free the memory bbs #ihd$v_lnkdebug, r3, error ; indicate debug clrl r0 ; indicate none ret ; ... error1: pushl r6 ; stack the fab to return to pool mem calls #1, g^free ; free the memory error: movzbl #1, r0 ; indicate debug enabled ret ; ... .end In article <3C67A834.989AD54@herald.ox.ac.uk>, Peter Harding wrote: > I could be a bit clearer: I know about toggling the bit/byte in the > image header to control whether the thing runs in debug mode by default > or not, but what I want is to know what to replace ***** with in the > following: > > if ( ***** ) { > > /* I'm being debugged. Act accordingly */ > > } else { > > /* I'm not being debugged. Run as normal. */ > > }; > > I know it goes against the 'spirit' of debugging in that the > not-debugged clause will be rather hard to debug, but it's what I need. > > Thanks! > > Joe wrote: > > > > I've never had need to fiddle with it however - assuming I understand > > your question I seem to have some dim memory of a bit (byte?) in the > > image header that controls this. The linker manual would be the place > > to start. > > > > Joe > > > > Peter Harding wrote in message news:<3C666291.CC53D4F1@herald.ox.ac.uk>... > > > Howdy y'all > > > > > > Small question: how can my (C today, but tomorrow will be different) > > > program tell if it is being run in debug mode? > > > > > > I'm not shy of system service calls. > > > > > > > > > Thanks very much! -- John A. Dundas III Director, Information Technology Services, Caltech Mail Code: 014-81, Pasadena, CA 91125-8100 Phone: 626.395.3392 FAX: 626.449.6973