바이너리 파일에서 0이 아닌 마지막 바이트를 찾으십시오. 어떻게?


0

끝에 null로 채워진 거대한 이진 파일이 있으며 마지막 0이 아닌 null 바이트, 특히 파일 시작 부분의 오프셋을 찾고 싶습니다.

몇 가지 명령 줄 솔루션을 찾고 있습니다.


사용 가능한 도구와 스킬 셋이 중요하지만 필자는 파일 열기, LOF 찾기 (LOF (또는 LOF-1)에서 바이트 읽기), 한 번에 한 바이트 씩 거꾸로 반복합니다. 그렇지 않으면 읽으십시오. 널이 아닌 경우 인덱스를 저장하십시오. eof까지 반복; 저장 값 방출
Yorik

답변:


2

어떤 도구를 가지고 있는지 또는 어떤 OS를 가지고 있는지에 대해서는 아무 말도하지 않지만 xxd 및 grep과 같은 표준 유닉스 도구에 액세스한다고 가정하면 다음과 같이 할 수 있습니다.

xxd my_binary_file | grep -E ": [0-9,a-f, ]*[1-9,a-f]+"

위의 명령은 0000으로 표시된 파일 부분을 필터링합니다.


1

작은 파일의 경우 :

hexdump -C file | tail

hexdump유틸리티는 동일한 내용으로 연속적인 행을 압축하므로 마지막 10 행의 출력을 제외한 모든 행을 삭제하면 출력이 반복되는 마지막 위치가 표시됩니다.

더 큰 파일의 경우

dd if=file bs=1M skip=$n count=1 | hexdump -C | tail

의 다른 값에 대해서는 $n이진 검색을 수행하십시오. 예 : 700GB 파일의 경우,로 시작 skip=350000합니다. 출력이 모두 0으로 돌아 오면 반으로 줄어 skip=175000들고 0이 아닌 바이트를 표시하면 0으로 돌아가고 skip=525000각 반복에서 단계 크기를 절반으로 줄입니다. 이것은 파일 내부에 큰 0 블록이 없지만 큰 파일의 경우 훨씬 빠르다고 가정합니다.


감사합니다! hexdump최근에 여러 번 사용한 명령으로 밝혀졌습니다.
ryenus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.