mirror of
https://github.com/GnoConsortium/gno.git
synced 2025-02-22 08:29:09 +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
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…
x
Reference in New Issue
Block a user