Это мой сценарий, который я пишу.perl искать и удалять при различных смещениях в binmode
#usr/bin/perl
use warnings;
open(my $infile, '<', "./file1.bin") or die "Cannot open file1.bin: $!";
binmode($infile);
open(my $outfile, '>', "./extracted data without 00's.bin") or die "Cannot create extracted data without 00's.bin: $!";
binmode($outfile);
local $/; $infile = <STDIN>;
print substr($infile, 0, 0x840, '');
$infile =~ s/\0{16}//;
print $outfile;
Я загружаю двоичный файл в perl. Я мог искать и исправлять некоторые отклонения, но то, что я хотел бы сделать, теперь может найти любой экземпляр «00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
» (16 байт?) И удалить его из файла, но не менее 16 байт. Что-то меньшее, чем я хотел бы уйти. В некоторых файлах смещение, где начало 00 будет на разных смещениях, но если я правильно думаю, если я могу просто найти 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
и удалить любой его экземпляр, то не имеет значения, какое смещение 00 находится в , Сначала я извлекал данные из определенных смещений, затем искал файл и отсекал из него. Я уже могу извлечь определенные сдвиги, мне нужно, мне просто нужно, чтобы открыть извлеченный файл и сбрить 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
EF 39 77 5B 14 9D E9 1E 94 A9 97 F2 6D E3 68 05
6F 7B 77 BB C4 99 67 B5 C9 71 12 30 9D ED 31 B6
AB 1F 81 66 E1 DD 29 4E 71 8D 54 F5 6C C8 86 0D
5B 72 AF A8 1F 26 DD 05 AF 78 13 EF A5 E0 76 BB
8A 59 9B 20 C5 58 95 7C E0 DB 44 6A EC 7E D0 10
09 42 B1 12 65 80 B3 EC 58 1A 2F 92 B9 32 D9 07
96 DE 32 51 4B 5F 3B 50 9A D1 09 37 F4 6D 7C 01
01 4A A4 24 04 DC 83 08 17 CB 34 2C E5 87 26 C1
35 38 F4 C4 E4 78 FE FC A2 BE 99 48 C9 CA 69 90
33 87 09 A8 27 BA 91 FC 4B 77 FA AB F5 1E 4E C0 I want to leave everything from
F2 78 6E 31 7D 16 3B 53 04 8A C1 A8 4B 70 39 22 <----- here up
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <----- I want to prune everything
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 from here on
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<---- this IS the end of the file, and
just need to prune these few rows
of 00's
Говорят, что «F2 78 6E
» из приведенного выше примера, находится смещение 0x45000
НО в другом файле 00 00 начнется с другого смещения, как я могу его закодировать так, чтобы 00 00's
обрезался. В любом файле, который я открываю? Если мне нужно быть более конкретным, просто спросите. Кажется, я бы дошел до файла до тех пор, пока не ударил длинную строку 00 00, а затем обрезал оставшиеся строки. Это имеет смысл вообще? Все, что я хочу сделать, это искать файл для любых экземпляров 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
и удалять/обрезать/обрезать его. Я хочу, чтобы сохранить все, кроме 00-
EDIT # 2 это сделал:
open($infile, '<', './file1') or die "cannot open file1: $!";
binmode $infile;
open($outfile, '>', './file2') or die "cannot open file2: $!";
binmode $outfile;
local $/; $file = <$infile>;
$file =~ s/\0{16}//g;
print $outfile $file;
close ($infile);
close ($outfile);
Спасибо вам ikegami
за вашу помощь и терпение :)
Вы открыли '$ infile', но читали из' STDIN'. Вы перезаписываете свой дескриптор файла содержимым файла. (Идет, чтобы показать, что ваши имена переменных не соответствуют стандарту. Используйте '..._ fh' для дескрипторов файлов.) Вы не сказали, что печатать. – ikegami
Поверь мне, я дал ему хороший человек. Я думаю, что сегодня я уйду сегодня и сделаю еще завтра. спасибо за вашу помощь.но чтобы я мог понять, все, что я хочу сделать, это открыть извлеченный файл 59kn и удалить несколько строк из 00; s с конца lol. звучит достаточно легко. Я могу открыть HxD и сделать это вручную, но хороший сценарий, чтобы просто дважды щелкнуть, делает его намного легче для меня. Я ежедневно работаю с этими файлами и должен их вручную проверять, и было бы неплохо иметь инструмент, разделяющий каждую часть файла, файл 59kb - это всего лишь часть 16-мегабайтного файла. но многие другие данные являются статическими, – james28909
, и у меня нет никаких проблем при извлечении этого, и то, что я делаю, извлекает чуть больше 59 кб, таким образом, каждый файл будет заполнен в конце с 00, тогда i хотите добавить этот скрипт, чтобы удалить их. в любом случае, спасибо за все, что помогло до сих пор человеку. – james28909