[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference noted::hackers_v1

Title:-={ H A C K E R S }=-
Notice:Write locked - see NOTED::HACKERS
Moderator:DIEHRD::MORRIS
Created:Thu Feb 20 1986
Last Modified:Mon Aug 03 1992
Last Successful Update:Fri Jun 06 1997
Number of topics:680
Total number of notes:5456

336.0. "Image file identification /version anyone?" by BOEHM::GUENTHER () Fri Oct 17 1986 16:45

    Does anyone have a simple way of getting the image version (image
    file identification) of the running image?  Or does one have to
    read the image file?
    
    						thanks, /alan
T.RTitleUserPersonal
Name
DateLines
336.1$GETJPI (?)CLT::MULLENWhere Alf, the sacred river ran.Fri Oct 17 1986 17:578
    I simple call to $GETJPI with JPI$_IMAGNAME should do
    it unless I missed something.  Note that is the image
    is installed this wont return the version number
    otherwise all you save to do is parse the return
    string for a ';'.
    
    Dan
    
336.2IMAGE FILE IDENTIFICATION/VERSION ANYONEFNYFS::AUNGIERRene El Gringo sin casa, Irish RebelMon Oct 20 1986 12:2856
    Hello Alan,
    
    	I have a procedure written in COBOL which will give you a lot
	of information about processes. You could have a copy of the
        program if you want and make some changes. This is the type
        of output it produces.
    
	I wrote this with the attention of having it callable from any
    	language and easy to use but it is not finished as it is a mid
    	night project and at the moment I am too busy to continue. It
    	is my attention for it to be able to return any chosen process
    	info with a very simple call to it so that it can be used by
    	any language and if the system service call changes then only
    	this module would need to be changed and not the programs that
    	call it.
    
JOB PROCESS INFORMATION OF SMART GROUP
Username is  AUNGIER     
Process Name is  Malvinas
Images running are  FNY09$DUB10:[BSG.][AUNGIER.SYSTEM_SERVICE_PROGRAM_EXAMPLES.COB.EXE]SYS$GETJPI.EXE;1
Your terminal Id is  LTA84:
Your process Hex Id is  
00000202
Your owner process hex Id is  
00000202
Your process mode is   INTERACTIVE



JOB PROCESS INFORMATION OF SMART GROUP
Username is  BANCIL      
Process Name is  BANCIL
Images running are  FNY09$DUA0:[SYS0.SYSCOMMON.][SYSEXE]TYPE.EXE
Your terminal Id is  LTA88:
Your process Hex Id is  
0000020C
Your process mode is   INTERACTIVE



JOB PROCESS INFORMATION OF SMART GROUP
Username is  CAMBRIDGE   
Process Name is  Audio
Images running are  FNY09$DUB10:[BSG.][SMART.DEV.EXE]SMU03E00.EXE;2
Your terminal Id is  
Your process Hex Id is  
000000AD
000000AD
Your process mode is   UNKNOWN    


    	I hope this is of some help. Let me know if you want the source.
    
    
    Regards
    
    Rene Aungier
    (ADG, Ferney-Voltaire)
336.3a good but not simple solutionHAYNES::GUENTHERMon Oct 20 1986 14:437
    Thanks all, Douglas Gordan sent me a routine which does what I was
    afraid I'd have to - do a getjpi for the image's file name, then
    open/read/close the file and get the data out of the appropriate
    record in the image.  UGH.  Progress!  Where's .jbver when you need
    it?
    
    							/alan
336.4There's a copy in P1BISQUE::RATCLIFFJohn RatcliffMon Oct 20 1986 20:056
    Well, if you want the version name of the image you're running (for
    another process, that would mean kernel-asts), ctl$gl_imghdrbf in
    p1 space holds a longword pointer to p1 info, which looks a good
    deal like block 0 of the .EXE file + full file name.
    
    Hope this helps, John
336.5re: .4BOEHM::GUENTHERTue Oct 21 1986 13:434
    That sounds much better, I will check into it.
    
    								/alan
    
336.6Check the Internals BibleSKYLAB::FISHERBurns Fisher 381-1466, ZKO1-1/D42Tue Oct 21 1986 16:317
    Check out Kenah and Bate, pp 743-744.  It looks like
    IHD$L_IDENT(image_header) contains a pointer to the image id section.
    In the image ID section, you have IHI$T_IMGNAM (image name),
    IHI$T_IMGID, IHI$Q_LINKTIME, and IHI$T_LINKID.  I presume that IMGID
    will give you what you want.
    
    Burns
336.7It's amazing what you can find in the attic!ERIS::CALLASO jour frabbejais! Calleau! Callai!Wed Oct 22 1986 13:40144
    Here's a routine that I wrote ages ago (check the date). It's not the
    best code in the world, but it has worked on VMS versions 1 through 5
    inclusive, needing nothing worse than a re-compile. 
    
    The "system programmer notes" referred to in the comments were the
    class notes from the original VMS System Programmer course (now called
    the VMS Internals course). Kenah & Bate more than supercedes these
    notes. "F4V" was what we called the original VAX Fortran compiler.
    
    	Jon

	.Title	JDC_GET_VERSION : Get ident & link time
	.Ident	/V1.01/
	.Sbttl	Opening Remarks & Comments
;
;
;	Written by J. D. Callas 1-Jun-1979
;
;*******************************************************************************
;	Change Log:
;*******************************************************************************
;
;
;	The subroutine JDC_GET_VERSION will obtain the ident & link
;time of the program that calls it.The procedure it uses is:
;When VMS starts a program, it actually calls it as a subroutine,
;passing it 6 arguments via the AP. The 3rd argument points to the
;DCL header, which contains (among other things) the ident and link
;time of the image. This subroutine obtains these from the DCL header
;by declaring an initialization procedure which stores the
;whole argument list in a global psect called JDC_IMG_ARGLIST.
;the DCL header is grabbed by GET_VERSION from this block
;of storage & returns the ident & link time to its caller.
;A map of the DCL header can be found in the system programmer notes,
;volume 2. The initialization procedure has the global name JDC_IA_SAVE.
;
;	Calling Sequence (F4V):
;
;	CALL JDC_GET_VERSION(ident,date)
;
;   ident = the address of a CHARACTER*15 descriptor to receive the
;	ident of the executable image
;
;   date = the address of a CHARACTER*24 descriptor to recive the
;	link time of the executable image
;
;
;	A sample call is:
;
;
;	CHARACTER IDENT*15,DATE*24
;	CALL JDC_GET_VERSION(IDENT,DATE)
;	TYPE*, IDENT,'    ',DATE
;
;Version-3.17      20-JUN-1995 15:34:12.38
;
.page

	.sbttl	EQUIVALENCE SYMBOLS & ERROR MSGS
	.psect	$pdata	pic,usr,con,rel,lcl,shr,noexe,rd,nowrt
	.library /SYS$LIBRARY:LIB/
	$ihddef
	$ihidef
ident_error_msg:
	.ascii	/*Ident*Error***/
first_2_args = 4	;offset from AP to 1st 2 args (via MOVQ)
			;We will use:
;ihd$w_imgidoff		 -- offset from the beginning of the DCL header to
;			    the word containing the image ident offset
;ihi$t_imgid		 -- offset from the image header to the ident
;ihi$q_linktime 	 -- offset from the DCLH to the link time
.page

	.sbttl	Main Subroutine
	.psect	$code	pic,usr,con,rel,lcl,shr,exe,rd,nowrt
jdc_get_version::	;entry point
	.word	^X0FFC	;save R2 => R11
	cmpb	(AP),#2 	;Are there the right # of args?
	blss	no_args    	;BRif too few, ignore extra
;
;This routine is pure-procedure. The regesters are:
;	R0 = temporary, condition flags, & status back to caller
;	R1 = temporary
;	R2 = 	"
;	R3 =	"
;	R4 =	"
;	R5 =	"
;	R6 = address of the ident descriptor
;	R7 = address of the date descriptor
;	R8 = Unused
;	R9 = Unused
;	R10 = address of the DCL header
;	R11 = temporary for offsets & addresses into the DCL header
;
	movq	first_2_args(AP),r6		 ;move descriptors in r6 & r7
	movl	jdc_img_arglist+12,r10		 ;get pointer to the DCL header
	movc5	#0,(r6),#^A/ /,(r6),@4(r6)	 ;clear ident string
	movzwl	ihd$w_imgidoff(r10),r11		 ;r11=address of image header
	addl	r10,r11
	movzbl	ihi$t_imgid(r11),r2		 ;get # of bytes to transfer
	movc3	r2,ihi$t_imgid+1(r11),@4(r6)	 ;transfer the ident back to
						 ;the caller
	$asctim_s -				 ;convert the link date &
	timbuf=(r7),timadr=ihi$q_linktime(r11)	 ;transfer 
	ret					 ;return
.page

	.sbttl	No_args: error handling

no_args:
	movl	#24,r0			;load in ss$_insfargs
	blbc	(ap),10$		;exit if 0 args
	movl	4(AP),r2		;load in the descriptor for the  error msg
	movc3	(r2),ident_error_msg,@4(r2) ;load in ident error if 1 arg
10$:	ret				;exit
	.page

	.sbttl	JDC_IA_SAVE & JDC_IMG_ARGLIST - initiailization
;
;
;	This entry is callaed before the mainprogram executes
;	(because of the LIB$INITIALIZE .psect ). 
;	The arguments to the initial AP are saved in JDC_IMG_ARGLIST for use
;	by later users.
;
jdc_ia_save::	.word ^m<>		;enter, we use no regs
	movq	(ap),jdc_img_arglist	;store the argument list
	movq	8(ap),jdc_img_arglist+8
	movq	16(ap),jdc_img_arglist+16
	movq	24(ap),jdc_img_arglist+24
	movl	#1,r0			;return with a success code
	ret


	.extrn	lib$initialize		;force loading of initialization proc
	.psect	lib$initialize	nopic,usr,con,rel, -
				gbl,noexe,rd,nowrt,long
	.long	jdc_ia_save


	.psect	$local	pic,usr,con,rel,lcl,noshr,noexe,rd,wrt
jdc_img_arglist::
	.blkl	8
	.end 
336.8Image info? -- Ask JonANYWAY::GORDONHayduke Lives!Thu Oct 23 1986 12:0411
    Re: .-1
    
    Hi Jon!
    
    	It's interesting to note that the routine I sent to Alan is
    based on another of Jon's old programs that I obtained long before
    I had ever met Jon, (We have a mutual friend  :-) ) and it reads
    the image file.  Now we know who the resident "expert" on image
    idents is...
    
    						--Doug