/usr/lib/radare/bin/monitor is in radare-common 1:1.5.2-6.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | #!/usr/bin/perl
#
# monitorization client for radare
#
# pancake <youterm.com>
#
# TODO: Rewrite using inotify/glib? and C
sub slurpit {
my ($file) = @_;
return undef unless (-f $file);
open F, "<$file" || return undef;
my $ret=""; while(<F>) { $ret.="$_"; }
close F;
#$ret=~s/\n/, /g;
# $ret=~s/\r//;
# $ret=~s/\ \ //g;
return $ret;
}
my $f=$ARGV[0];
my $MONITOR_PATH=$ENV{HOME}."/.radare/monitor/";
my $MONITOR_SESSION=$ENV{MONITOR_SESSION};
$MONITOR_SESSION="0" if ($MONITOR_SESSION eq "");
system("mkdir -p $MONITOR_PATH");
$MONITOR_PATH = $ENV{MONITORPATH}
if ($ENV{MONITORPATH} ne "");
if ($ARGV[0] eq "-l") {
opendir DH, $MONITOR_PATH || die "cannot open";
my $i=0;
while(($file=readdir(DH))) {
next if ($file=~/^\./ || $file=~/\.txt/);
print("$file\t".slurpit("$MONITOR_PATH/$file")."\n");
$i++;
}
closedir DH;
exit(0);
}
if ($ARGV[0] eq "-r") {
unlink("$MONITOR_PATH/".$ARGV[1].".$MONITOR_SESSION");
unlink("$MONITOR_PATH/".$ARGV[1].".$MONITOR_SESSION.txt");
print "Monitor '".$ARGV[1]."' removed\n";
exit(0);
}
if ($ARGV[0] eq "-R") {
system("rm -rf $MONITOR_PATH/*");
print "All monitors removed\n";
exit(0);
}
if ($ARGV[0] eq "-e") {
system("vim $MONITOR_PATH/".$ARGV[1].".$MONITOR_SESSION");
exit(0);
}
if ($ARGV[0] eq "") {
print "Usage: rsc monitor [-lr] [name] [command]\n";
print " -l list all running monitors\n";
print " -e [name] edit monitor commands\n";
print " -r [name] remove a specific monitor\n";
print " -R removes all monitors\n";
print "Use MONITORPATH defaults to ~/.radare/monitor/\n";
print "Use MONITORSESSION defaults to 0\n";
exit(0);
} elsif ($ARGV[1] ne "") {
open FD, ">$MONITOR_PATH/".$ARGV[0].".$MONITOR_SESSION" || die "cannot open";
shift(@ARGV);
chomp(my $str = join (' ', @ARGV));
print FD "$str\n";
close FD;
exit(0);
}
# TODO: add support for keyboard interaction
# 'e' key to edit script
# 'q' to quit
# TODO: adjust console and add scrolling with hjkl + arrows
if ((!($f=~/\.txt/)) && (-f "$MONITOR_PATH/$f.$MONITOR_SESSION")) {
my $buf2 = "";
while(1) {
my $buf = slurpit($MONITOR_PATH."/$f.$MONITOR_SESSION.txt");
if ($buf ne $buf2) {
$buf2 = $buf;
print "\x1b[0;0H\x1b[2J$buf\x1b[0m\n";
}
sleep(1);
}
} else {
print STDERR "Cannot open $MONITOR_PATH/$f.$MONITOR_SESSION.txt\n";
}
|