display corresponding section for markers in explorer
This commit is contained in:
@ -139,4 +139,52 @@ sub execute_query {
|
||||
return $result;
|
||||
}
|
||||
|
||||
sub format_number_sep {
|
||||
my ($number) = @_;
|
||||
1 while $number =~ s/^(-?\d+)(\d{3})/$1.$2/;
|
||||
return $number;
|
||||
}
|
||||
|
||||
sub elf_read_sections {
|
||||
my ($elffile) = @_;
|
||||
|
||||
my $readelf_out = qx{readelf -S $elffile};
|
||||
my @lines = split "\n", $readelf_out;
|
||||
|
||||
my @sections;
|
||||
foreach my $line (@lines) {
|
||||
|
||||
# [ 1] .text PROGBITS 00100000 001000 0000f0 00 AX 0 0 4
|
||||
next
|
||||
unless $line =~
|
||||
/^\s*\[\s*\d+\]\s+(\..+?)\s+([A-Z]+)\s+([0-9a-f]+)\s+([0-9a-f]+)\s+([0-9a-f]+)\s+.*$/;
|
||||
|
||||
push @sections, {
|
||||
name => $1,
|
||||
type => $2,
|
||||
address => $3, # Memory location
|
||||
offset => $4, # File location
|
||||
size => $5,
|
||||
};
|
||||
}
|
||||
|
||||
return @sections;
|
||||
}
|
||||
|
||||
sub get_section_name {
|
||||
my ( $address, @sections ) = @_;
|
||||
|
||||
my $name;
|
||||
my $last_address = 0;
|
||||
foreach my $section (@sections) {
|
||||
my $cur_address = hex( $section->{address} );
|
||||
if ( hex($address) >= $cur_address && $cur_address > $last_address ) {
|
||||
$name = $section->{name};
|
||||
$last_address = $cur_address;
|
||||
}
|
||||
}
|
||||
|
||||
return $name;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
Reference in New Issue
Block a user