|
|
researchv10 Norman
#include <stdio.h>
#include <ctype.h>
#include <libc.h>
#include </usr/include/a.out.h>
#define INF (~0UL>>1)
int minlen = 4;
int oflag;
int tflag, dflag, sflag, aflag;
void strings(FILE*, long, long);
char *flush(char*, long);
int
main(int argc, char **argv)
{
int i;
int errors = 0;
struct exec header;
while(argc>1 && argv[1][0]=='-') {
if(argv[1][1] == 0) /* oldthink */
aflag++;
while(*++argv[1]) {
switch(*argv[1]) {
case 'o':
oflag++;
continue;
case 't':
tflag++;
continue;
case 'd':
dflag++;
continue;
case 's':
sflag++;
continue;
case 'a':
aflag++;
continue;
case '0':case '1':case '2':case '3':case '4':
case '5':case '6':case '7':case '8':case '9':
minlen = atoi(argv[1]);
}
break;
}
argc--;
argv++;
}
if(!(tflag|dflag|sflag|aflag)) {
tflag++;
dflag++;
}
for(i=1; i<argc; i++) {
long base = sizeof header;
FILE *f = fopen(argv[i],"r");
if(f == 0) {
fprintf(stderr,"strings: ");
perror(argv[i]);
errors++;
continue;
}
if(argc > 2) {
if(i > 1) printf("\n");
printf("%s:\n", argv[i]);
}
if(aflag)
goto all;
if(fread(&header,sizeof(header),1,f) != 1) goto all;
switch(header.a_magic) {
all:
default:
strings(f, 0, INF);
break;
case ZMAGIC:
base = 1024;
case OMAGIC:
case NMAGIC:
if(tflag)
strings(f, base, header.a_text);
base += header.a_text;
if(dflag)
strings(f, base, header.a_data);
base += header.a_data + header.a_syms +
header.a_trsize + header.a_drsize;
if(sflag)
strings(f, base, INF);
}
fclose(f);
}
return errors;
}
char string[1024];
void
strings(FILE *f, long base, long length)
{
int c;
char *cp = string;
fseek(f, base, 0);
cp = string;
for( ; --length>=0 && (c=getc(f))!=EOF; base++) {
switch(c) {
case '\n':
case 0:
cp = flush(cp, base);
continue;
case '\t':
case '\b':
break;
default:
if(isprint(c))
break;
cp = string;
continue;
}
*cp++ = c;
if(cp >= string + sizeof string - 2)
cp = flush(cp, base);
}
}
char *
flush(char *cp, long base)
{
if(cp-string >= minlen) {
*cp = 0;
if(oflag)
printf("%9lo ", base - (cp-string));
puts(string);
}
return string;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.