44 lines
766 B
Perl
Executable File
44 lines
766 B
Perl
Executable File
#!/usr/bin/perl -w
|
|
|
|
use vars qw(%free_ptrs_map);
|
|
use 5.010;
|
|
|
|
open my $fh, "<", "observer.log"
|
|
or die "Can't read trace log";
|
|
|
|
my @free_ptrs;
|
|
while (<$fh>) {
|
|
chomp;
|
|
if (/free.*ptr=(0x[0-9a-f]+).*/i) {
|
|
my $ptr = $1;
|
|
push @free_ptrs, $ptr;
|
|
}
|
|
}
|
|
|
|
for (my $idx = 0; $idx < @free_ptrs; $idx++) {
|
|
$free_ptrs_map{$free_ptrs[$idx]} = $idx;
|
|
}
|
|
|
|
# rewind to begin
|
|
seek $fh, 0, 0;
|
|
|
|
while (<$fh>) {
|
|
chomp;
|
|
if (/alloc.*size=([0-9]+).*ptr=(0x[0-9a-f]+).*/i) {
|
|
my $size = $1;
|
|
my $ptr = $2;
|
|
my $idx = $free_ptrs_map{$ptr};
|
|
if (defined $idx) {
|
|
say "1 $idx $size";
|
|
} else {
|
|
say "1 -1 $size";
|
|
}
|
|
} elsif (/free.*ptr=(0x[0-9a-f]+).*/i) {
|
|
my $ptr = $1;
|
|
my $idx = $free_ptrs_map{$ptr};
|
|
say "2 $idx";
|
|
}
|
|
}
|
|
|
|
close $fh;
|