mirror of
https://github.com/GnoConsortium/gno.git
synced 2024-12-29 13:29:20 +00:00
Initial checkin of the GNO v2.0.4 strings(1) util. No changes yet for
GNO v2.0.6, other than a GNO-formatted man page was created from the BSD original.
This commit is contained in:
parent
e51b60e6cf
commit
ade81f0a94
bin/strings
5
bin/strings/Makefile
Normal file
5
bin/strings/Makefile
Normal file
@ -0,0 +1,5 @@
|
||||
strings.a: strings.c
|
||||
compile strings.c keep=strings
|
||||
|
||||
strings: strings.a
|
||||
link strings 2/direct256 keep=strings
|
96
bin/strings/strings.1
Normal file
96
bin/strings/strings.1
Normal file
@ -0,0 +1,96 @@
|
||||
.\" Copyright (c) 1980, 1990 The Regents of the University of California.
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)strings.1 6.11 (Berkeley) 5/9/91
|
||||
.\"
|
||||
.Dd May 9, 1991
|
||||
.Dt STRINGS 1
|
||||
.Os BSD 3
|
||||
.Sh NAME
|
||||
.Nm strings
|
||||
.Nd find printable strings in a file
|
||||
.Sh SYNOPSIS
|
||||
.Nm strings
|
||||
.Op Fl afo
|
||||
.Op Fl n Ar number
|
||||
.Op Ar file ...
|
||||
.Sh DESCRIPTION
|
||||
.Nm Strings
|
||||
displays the sequences of printable characters in each of the specified
|
||||
files, or in the standard input, by default.
|
||||
By default, a sequence must be at least four characters in length
|
||||
before being displayed.
|
||||
.Pp
|
||||
The options are as follows:
|
||||
.Bl -tag -width Ds
|
||||
.It Fl a
|
||||
By default,
|
||||
.Nm strings
|
||||
only searches the text and data segments of object files.
|
||||
The
|
||||
.Fl a
|
||||
option causes
|
||||
.Nm strings
|
||||
to search the entire object file.
|
||||
.It Fl f
|
||||
Each string is preceded by the name of the file
|
||||
in which it was found.
|
||||
.It Fl n
|
||||
Specifies the minimum number of characters in a sequence to be
|
||||
.Ar number ,
|
||||
instead of four.
|
||||
.It Fl o
|
||||
Each string is preceded by its decimal offset in the
|
||||
file.
|
||||
.El
|
||||
.Pp
|
||||
.Nm Strings
|
||||
is useful for identifying random binaries, among other things.
|
||||
.Sh SEE ALSO
|
||||
.Xr hexdump 1
|
||||
.Sh BUGS
|
||||
The algorithm for identifying strings is extremely primitive.
|
||||
In particular, machine code instructions on certain architectures
|
||||
can resemble sequences of ASCII bytes, which
|
||||
will fool the algorithm.
|
||||
.Sh COMPATIBILITY
|
||||
Historic implementations of
|
||||
.Nm
|
||||
only search the initialized data portion of the object file.
|
||||
This was reasonable as strings were normally stored there.
|
||||
Given new compiler technology which installs strings in the
|
||||
text portion of the object file, the default behavior was
|
||||
changed.
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm
|
||||
command appeared in
|
||||
.Bx 3.0 .
|
89
bin/strings/strings.1G
Normal file
89
bin/strings/strings.1G
Normal file
@ -0,0 +1,89 @@
|
||||
.\" Copyright (c) 1980, 1990 The Regents of the University of California.
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)strings.1 6.11 (Berkeley) 5/9/91
|
||||
.\"
|
||||
.TH STRINGS 1 "9 May 1991" GNO "Commands and Applications"
|
||||
.SH NAME
|
||||
.BR strings
|
||||
\- find printable strings in a file
|
||||
.SH SYNOPSIS
|
||||
.BR strings
|
||||
.RB [ -afo ]
|
||||
.RB [ -n
|
||||
.IR number ]
|
||||
.RI [ "file ..." ]
|
||||
.SH DESCRIPTION
|
||||
.BR Strings
|
||||
displays the sequences of printable characters in each of the specified
|
||||
files, or in the standard input, by default.
|
||||
By default, a sequence must be at least four characters in length
|
||||
before being displayed.
|
||||
.LP
|
||||
.BR Strings
|
||||
is useful for identifying random binaries, among other things.
|
||||
.SH OPTIONS
|
||||
.IP \fB-a\fR
|
||||
By default,
|
||||
.BR strings
|
||||
only searches the text and data segments of object files. The
|
||||
.BR \-a
|
||||
option causes
|
||||
.BR strings
|
||||
to search the entire object file.
|
||||
.IP \fB-f\fR
|
||||
Each string is preceded by the name of the file in which it was found.
|
||||
.IP \fB-n\fR
|
||||
Specifies the minimum number of characters in a sequence to be
|
||||
.BR number ,
|
||||
instead of four.
|
||||
.IP \fB-o\fR
|
||||
Each string is preceded by its decimal offset in the
|
||||
file.
|
||||
.SH SEE ALSO
|
||||
.BR hexdump (1)
|
||||
.SH BUGS
|
||||
The algorithm for identifying strings is extremely primitive.
|
||||
In particular, machine code instructions on certain architectures
|
||||
can resemble sequences of ASCII bytes, which
|
||||
will fool the algorithm.
|
||||
.SH COMPATIBILITY
|
||||
Historic implementations of
|
||||
.BR strings
|
||||
only search the initialized data portion of the object file.
|
||||
This was reasonable as strings were normally stored there.
|
||||
Given new compiler technology which installs strings in the
|
||||
text portion of the object file, the default behavior was
|
||||
changed.
|
||||
.SH HISTORY
|
||||
The
|
||||
.BR strings
|
||||
command appeared in 3.0 BSD.
|
96
bin/strings/strings.c
Normal file
96
bin/strings/strings.c
Normal file
@ -0,0 +1,96 @@
|
||||
#pragma stacksize 1024
|
||||
|
||||
#include <types.h>
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
const long bufSize = 512l;
|
||||
int all;
|
||||
|
||||
int myprint(char c)
|
||||
{
|
||||
if (all) {
|
||||
if (isprint(c) || (c==9)) return 1;
|
||||
} else {
|
||||
if ( ((c>64) && (c<91)) || ((c>96) && (c<123)) || ((c>47) && (c<58))
|
||||
|| (c==32) || (c==9) ) return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
main(int argc,char **argv)
|
||||
{
|
||||
FILE *duh;
|
||||
int concur,c,errflg = 0,size,pos;
|
||||
int inRow = 4,keepOff = FALSE;
|
||||
unsigned char *buffer,*string;
|
||||
unsigned long stringSize = 256l,offSet;
|
||||
extern char *optarg;
|
||||
extern int optind;
|
||||
extern int getopt(int,char **,char*);
|
||||
|
||||
/* optarg = NULL; optind = 0; */ /* this makes getopt restartable */
|
||||
all = FALSE;
|
||||
|
||||
while ((c = getopt(argc,argv, "c:na")) != EOF) {
|
||||
switch (c) {
|
||||
case 'c' :
|
||||
inRow = atoi(optarg);
|
||||
break;
|
||||
case 'n' :
|
||||
keepOff = TRUE;
|
||||
break;
|
||||
case 'a' :
|
||||
all = TRUE;
|
||||
break;
|
||||
default : errflg++;
|
||||
}
|
||||
}
|
||||
if (errflg) {
|
||||
fprintf(stderr,"usage: strings [-a] [-c #chars] [-n] files...\n");
|
||||
exit(2);
|
||||
}
|
||||
if (inRow < 4) inRow = 4;
|
||||
printf("optind: %d argc: %d\n",optind,argc);
|
||||
argv += optind;
|
||||
buffer = (unsigned char *)malloc(bufSize);
|
||||
string = (unsigned char *)malloc(stringSize);
|
||||
if (optind == argc) {
|
||||
duh = stdin;
|
||||
goto action;
|
||||
}
|
||||
for (;optind<argc;optind++) {
|
||||
if ((duh = fopen(*argv,"rb")) == NULL) {
|
||||
fprintf(stderr,"error opening %s\n",*argv);
|
||||
exit(1);
|
||||
}
|
||||
argv++;
|
||||
action: concur = 0;
|
||||
offSet = 0l;
|
||||
while (!feof(duh)) {
|
||||
size = fread(buffer,sizeof(unsigned char),bufSize,duh);
|
||||
for (pos = 0;pos < size;pos++,offSet++) {
|
||||
if (myprint(c=toascii(buffer[pos]))) {
|
||||
string[concur] = c;
|
||||
if (concur++ > stringSize) {
|
||||
stringSize += 256l;
|
||||
if ((string = realloc(string,stringSize)) == NULL)
|
||||
exit(2);
|
||||
}
|
||||
} else if ((isspace(c) || !c) && (concur >= inRow)) {
|
||||
string[concur] = 0;
|
||||
if (keepOff) printf("%6.6lX : ",offSet);
|
||||
printf("%s\n",string);
|
||||
concur = 0;
|
||||
} else {
|
||||
concur = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(duh);
|
||||
}
|
||||
free(buffer);
|
||||
free(string);
|
||||
exit(0);
|
||||
}
|
Loading…
Reference in New Issue
Block a user