Чтение данных из файла ELF в Perl - PullRequest
0 голосов
/ 05 октября 2018

Мне нужно прочитать данные из файла ELF или AXF, найти данные в этом файле и вернуть их адрес.В Linux я попробовал objdump -t filename.axf | grep search_string и получил результат.

Как это сделать в Perl.Я тоже попробовал Parse :: Readelf, но это не сработало.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Для случайного сценария вы можете просто сделать

my $search_str = 'minor';
for (grep {chop; s/.*(0x[0-9a-f]+\s+\S*$search_str\S*)$/$1/x} `objdump -t a.exe`) {
  my ($addr, $name) = split / +/;
  print "$name: $addr\n";
}
0 голосов
/ 05 октября 2018

Вы можете использовать Binutils::Objdump.

hello.c :

#include <stdio.h>

int main() {
    printf("Hello world!\n");
}

Создать ELF :

gcc -g hello.c -o hello

objdump.pl :

use feature qw(say);
use strict;
use warnings;
use Binutils::Objdump (); # Seems like this module is missing Exporter interface!??

my $search_string = 'hello.c';

Binutils::Objdump::objdumpopt('-t');
Binutils::Objdump::objdumpwrap("SYMBOL TABLE" => sub { mysymtab( $search_string, @_ ) });
Binutils::Objdump::objdump('hello');

sub mysymtab {
    my ($search_string, @lines) = @_;

    for my $line (@lines) {
        say $line if $line =~ /\Q$search_string\E/;
    }
}
...