@@ -1,5 +1,7 @@
#!/usr/bin/perl
+use strict;
+
use File::Basename;
use Math::BigInt;
@@ -79,9 +81,9 @@ sub parse_x86_regs
sub reg_name
{
my ($reg) = @_;
- $reg =~ s/r(.)x/e\1x/;
- $reg =~ s/r(.)i/e\1i/;
- $reg =~ s/r(.)p/e\1p/;
+ $reg =~ s/r(.)x/e$1x/;
+ $reg =~ s/r(.)i/e$1i/;
+ $reg =~ s/r(.)p/e$1p/;
return $reg;
}
@@ -94,17 +96,15 @@ sub process_x86_regs
}
# find the arguments to the instruction
- if ($line =~ /([0-9a-zA-Z\,\%\(\)\-\+]+)$/) {
- $lastword = $1;
- } else {
- return "";
- }
+ return "" unless ($line =~ /([0-9a-zA-Z\,\%\(\)\-\+]+)$/);
+
+ my $lastword = $1;
# we need to find the registers that get clobbered,
# since their value is no longer relevant for previous
# instructions in the stream.
- $clobber = $lastword;
+ my $clobber = $lastword;
# first, remove all memory operands, they're read only
$clobber =~ s/\([a-z0-9\%\,]+\)//g;
# then, remove everything before the comma, thats the read part
@@ -116,7 +116,7 @@ sub process_x86_regs
$clobber = "";
}
- foreach $reg (keys(%regs)) {
+ foreach my $reg (keys(%regs)) {
my $clobberprime = reg_name($clobber);
my $lastwordprime = reg_name($lastword);
my $val = $regs{$reg};
@@ -192,14 +192,15 @@ if ($module ne "") {
exit;
}
# ok so we found the module, now we need to calculate the vma offset
- open(FILE, "objdump -dS $filename |") || die "Cannot start objdump";
- while (<FILE>) {
+ open(my $obj, '-|', "objdump -dS $filename")
+ || die "Cannot start objdump: $!";
+ while (<$obj>) {
if ($_ =~ /^([0-9a-f]+) \<$function\>\:/) {
my $fu = $1;
$vmaoffset = hex($target) - hex($fu) - hex($func_offset);
}
}
- close(FILE);
+ close($obj);
}
my $counter = 0;
@@ -225,9 +226,11 @@ sub InRange {
# first, parse the input into the lines array, but to keep size down,
# we only do this for 4Kb around the sweet spot
-open(FILE, "objdump -dS --adjust-vma=$vmaoffset --start-address=$decodestart --stop-address=$decodestop $filename |") || die "Cannot start objdump";
+open(my $objdump, '-|',
+ "objdump -dS --adjust-vma=$vmaoffset --start-address=$decodestart --stop-address=$decodestop $filename")
+ or die "Cannot start objdump: $!";
-while (<FILE>) {
+while (<$objdump>) {
my $line = $_;
chomp($line);
if ($state == 0) {
@@ -252,7 +255,7 @@ while (<FILE>) {
}
}
-close(FILE);
+close($objdump);
if ($counter == 0) {
print "No matching code found \n";