#!/usr/bin/perl
#
# author: pof <eslack.org>
# perl port: pancake <youterm.com>
#

die "Usage: rsc strings-flag [file] ([minlen]) ([offset])\n" unless(@ARGV);

my $file=$ARGV[0];
my $minlen=$ARGV[1];
my $offset=$ARGV[2];
$minlen=3 unless($minlen);
my @strings=split('\n', `strings -tx -n2 $file`);
my @foo=split('\n', `rabin -e $file`);
my @foomem=split(' ', $foo[0]);
my @foodsk=split(' ', $foo[1]);
my $mem=`rax $foomem[0]` if (defined($foomem[0]));
my $disk=`rax $foodsk[0]` if (defined($foodsk[0]));
my $count=0;
$offset=$mem-$disk unless($offset);
my $file_info = `file $file`;

#if (!($file_info =~ /32-bit/)) {
#    print "fs strings\n";
#    print ":f _here_\n";
#
#    for my $i (0 .. $#strings) {
#	$strings[$i]=~s/^\ *//;
#	$strings[$i]=~/([^\ ]*) (.*)$/;
#	my $addr = $1;
#	#my $type = $2;
#	my $str  = $2;
#	my $cow;
#	eval ("\$cow = 0x$addr+$offset\n");
#	$str=~tr/\ \-\>\<\`\t\|&;\@"/.___________./;
#	$str=~s/\.*//g;
#	$str=substr($str, 0,27);
#	if ($str=~/%/ || length($str)>$minlen) {
#	    print ":fn str_\"$str\" @ 0x".sprintf "%08x\n", $cow;
#	    $count++;
#	}
#    }
#
#    print ":s _here_\n:f -_here_\n";
#    print STDERR "$count strings added.\n" if ( $ENV{"VERBOSE"} );
#} else {
    my @strs = split(/\n/,qx(rabin -rz $file));
    for my $i (0 .. @strs) {
	if ($strs[$i] =~ /^f /) {
	    $count++;
	}
	print $strs[$i],"\n";
    }
    print STDERR "$count strings added.\n" if ( $ENV{"VERBOSE"} );
#}
