[net.sources] Strings for the PC

bright@dataioDataio.UUCP (Walter Bright) (02/07/86)

Here's a program I wrote a while back to look at any file and dump
out any ascii strings in it. It's fun to try it out on various MS-DOS
files to see what strings are embedded in them. It's very useful to
run strings on new suspect public domain programs before you run them
to get some idea of what they do (like 'trashing hard disk').

To compile it with Datalight C:

	DLC -mci strings

which will generate STRINGS.COM. For those who just want to run it,
a uuencoded version follows.

--------------- Source code starts -------------
/*_ strings.c	05-Feb-86	Walter Bright	*/
/**************************************************
 * Find the printable strings in a file.
 * Copyright (C) 1986 by Northwest Software
 * All Rights Reserved
 * Use:
 *	strings file
 */

#include	<stdio.h>

#define	BUFMAX	255			/* buffer size			*/
char buffer[BUFMAX + 1];
int bufpnt;				/* index into buffer[]		*/
int number = 3;				/* min string length		*/
FILE *fin;				/* input file			*/
bool flag_h = FALSE;			/* TRUE means dump offset in hex */
long offset;
int xc;

main(argc,argv)
int argc;
char *argv[];
{ int i;


  if (argc != 2)
  {	fprintf(stderr,"Error: wrong number of arguments\n");
	fprintf(stderr,"Use: strings file\n");
	exit(1);
  }
  fin = fopen(argv[1],"rb");		/* open file for binary read	*/
  if (!fin)
  {	fprintf(stderr,"Can't open file '%s'\n",argv[1]);
	exit(1);
  }

  offset = 0;
  while (TRUE)
  {
	offset += bufpnt;
	bufpnt = 0;
	xc = fgetc(fin);		/* read char from file		*/
	offset++;
	while (isprint(xc) && bufpnt < BUFMAX)
	{	buffer[bufpnt++] = xc;
		xc = fgetc(fin);
	}
	if (bufpnt >= number
#if 0
		 && (xc == '\0' || xc == '\n' || xc == '\r' ||
		     xc == '$' || bufpnt == BUFMAX)
#endif
	    )
	{	buffer[bufpnt] = '\0';
		if (flag_h) printf("%5lx ",offset - 1);
		printf("%s\n",buffer);
	}
	if (xc == EOF) break;
  }
}

bool isprint(c)
int c;
{
  return c >= ' ' && c <= '~';
}
---------- Source code ends ------ STRINGS.COM starts ---------
begin 644 strings.com
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
M '4)N 0 B4<&Z7S_Z,']BUX,B4<*ZRN+7@R+1P*+3P0KP8E&  G B4X"=!90
M_W<*4%'_=PCH?_V#Q B)P5@[P752BUX,BT<$B4<"BUX,]T<&@ !T(K@! %"-
M1@I0_W<"_W<*Z-(!B>R+7@S_1P*+7@S'!_]/ZQ6+1@J+7@R+=P+_1P*(!(M>
M#,<'_P&+1@J#Q 9=PXM>#(%/!A  BUX,QP<  +C__X/$!EW#58/L!HGEBUX*
M@\,&BP>I( ")1@")7@)T""7]_PT! (D'BUX*@\,&BP>)1@ E&0 ] 0")7@)T
M ^D2 8MV"H/&!(,\ (EV!'0#Z8( BWX*@WT* '5YBT8 J00 =4Z#/H(" '0+
MN  %4.@$_(GLZP(QP(M>"HE'"@G =2:X  )0Z/7LB>R+7@2)!PG =0F+7@*!
M#P0 ZQ7HC?R+7@J)1PKK+8M>"H%/!H  ZR.+1@JYZ@(KP;D, )GW^8G#C8?:
M XM>"HE'!.A>_(M>"HE'"HM>"HM'!(E' O='!H  B48 =!?_=PJY %!14/]W
M".CN^XGLBUX*B0?K(XM>"O='!@0 = 6X 0#K [@  E#_=P+_=PCHLON)[(M>
M"HD'BUX*_P^+!PG B48 >3,]__]U%X/#!H$/" "+!ZD@ (E> '0.@2?O_^L(
MBUX*@4\&$ "+7@K'!P  N/__@\0&7<,QP(/$!EW#58OLBWX$BT8&BTX(_/.J
MBT8$7<-5B^P>BTX$CMF+=@:+?@B+3@KSI!]=PU6+[ :+3@2.P8M^!HMV"(M.
M"O.D!UW#            3F]R=&AW97-T($,L('=R:71T96X@8GD@5V%L=&5R
M($)R:6=H= !C    )@                                          
M                                            ;    &P         
M                #0I3=&%C:R!/=F5R9FQO=PT*) T*3F]T(&5N;W5G:"!M
M96UO<GD-"B0-"D)A9"!S=&%C:R!S:7IE('!A<F%M971E<@T*) T*1$]3(#$N
M>'@@;F]T('-U<'!O<G1E9 T*) T*3VYL>2 S,B!A<F=S(&%L;&]W960-"B0-
M"D9L;V%T:6YG('!O:6YT(&YO="!L;V%D960-"B0                     
M                                                            
M                                                            
M                                                            
M                                                            
M                                                            
M                       #              !%<G)O<CH@=W)O;F<@;G5M
M8F5R(&]F(&%R9W5M96YT<PH 57-E.B!S=')I;F=S(&9I;&4* ')B $-A;B=T
M(&]P96X@9FEL92 G)7,G"@ E-6QX(  E<PH  0  (       ,%@ ,'@  "T 
M*P @ ", 1@A-"%0(6PAS "4 8P!D &D ;P!U %@ > !P &8 90!% &< 1P!N
M ),)S0G3">\)[PE""DD*9@IK"FL*8PME#&4,20U)#=<.+0 K "          
M  !%              !&  $           !&  (           !D  ,     
M      !&  0                                                 
M                                                            
M                                                            
M                                                            
M                                           " @(" @(" @(# P,#
M P(" @(" @(" @(" @(" @(" @5 0$! 0$! 0$! 0$! 0$" @(" @(" @(" 
M0$! 0$! 0!@8&!@8&! 0$! 0$! 0$! 0$! 0$! 0$! 00$! 0$! *"@H*"@H
M(" @(" @(" @(" @(" @(" @("! 0$!  @                          
M                                                            
M                                                            
4                            
 
end