В настоящее время я изучаю структуру PE. Я пытаюсь разобрать это, используя perl вместо C.
Это не важно, но если вы читаете бинарный файл, вы должны перейти к определенному разделу. (Например, чтобы прочитать e_lfanew)
Я хочу прочитать данные в точке 0x78, которые читаются $buf с данными 0x200.
Вот два способа, которыми я думал, чтобы извлечь данные по адресу 0x78.
my ($ dummy, $ data) = unpack ("A0x78 A*", $buf);
or
seek (F, 0x78,0); read F, $buf, 0x200; print ~
Я хочу знать, какой из двух методов более эффективен, чем вычитание фиктивных данных и чтение данных и чтение новых данных через поиск.
unpack
, в другомread
данные; (независимо от буферизации) вы сравниваете работу в памяти с чтением с диска? Последнее предложение непонятно. - person zdim   schedule 16.02.2019x
вместоA
, чтобы пропускать байты, не возвращая их. - person ikegami   schedule 16.02.2019a
вместоA
для двоичных данных.A
удалит конечные0x20
байта - person ikegami   schedule 16.02.2019my $data = unpack("x0x78 a*", $buf);
- person ikegami   schedule 16.02.2019