이것은 제가 작성한 스크립트입니다.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 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
다른 파일에 0x45000
하지만 오프셋에서 "F2 78 6E
는"위의 예에서,라고 말할 면도하는 데 필요한 00 00은 다른 오프셋에서 시작할 것입니다. 어떻게 코드를 작성하여 00 00's
을 프 i (prune) 할 수 있습니까? 내가 여는 파일에서? 좀 더 구체적으로 질문 할 필요가 있으면 물어보십시오. 긴 00 00 문자열을 치고 나머지 줄을 정리할 때까지 필자는 지금까지 파일을 들여다 본 것처럼 보입니다. 그게 전부 이해가 되니? 내가 원하는 것은 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
의 모든 인스턴스를 파일에서 검색하고 삭제/정리/잘라내기만하면됩니다. 나는 00의
편집 #하지만 모든 것을 저장할 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);
모든 당신의 도움과 인내 :
'$ infile'을 열었지만'STDIN'을 읽었습니다. 파일 내용을 파일 핸들로 덮어 씁니다. (변수 이름이 표준 이하임을 보여주기 위해 파일 핸들에'..._ fh'를 사용하십시오.) 당신은 무엇을 인쇄 할지를 말하지 않았습니다. – ikegami
나는 그것을 좋은 사람으로주고있다. 나는 오늘 밤에 포기하고 내일 좀 더 할 거라고 생각해. 지금까지 모든 도움에 감사드립니다.하지만 나 자신을 분명히하기 위해서, 내가하고 싶은 것은 추출 된 59kn 파일을 열고 00의 몇 행을 지우는 것입니다. 쉬운 소리. 나는 HxD를 열고 수동으로 할 수 있지만 두 번 클릭하기 만하면 멋진 스크립트가 훨씬 쉽게 만들어 준다. 나는이 파일들을 매일 작업하며 수동으로 검사해야하며, 파일의 각 부분을 분리하는 툴을 가지고 있으면 좋을 것이다. 59kb 파일은 단지 16MB 파일의 일부분이다. 하지만 다른 데이터의 대부분은 정적, – james28909
과 나는 그 모든 추출에 어떤 문제가 없어, 그리고 내가 뭘하는지 조금 더 59 킬로바이트를 추출하는 것입니다, 그런 식으로 모든 파일이 끝날 때마다 패딩 될 것입니다 00, 그럼 난 이 스크립트를 삭제하여 00을 (를) 삭제하려고합니다. 어쨌든, 지금까지 모든 yoru 도움을 주셔서 감사합니다. – james28909