zip 파일을 분석하려고 할 때 약간 혼란스러운 부분 중 하나는 Zip64 Extra Information Field
파일 헤더(중앙 디렉터리 또는 로컬)에 특정 필드를 배치할 수 없는 경우 파일이 생성될 것으로 예상되므로 0xffffffff를 삽입합니다. 파일 헤더를 추가하고 추가 정보 필드에 실제 값을 입력합니다.
문서에 따르면여기, 이는 구조 뒤의 추가 필드 중 하나로 찾을 수 있습니다.
Value Size Description
----- ---- -----------
(ZIP64) 0x0001 2 bytes Tag for this "extra" block type
Size 2 bytes Size of this "extra" block
Original
Size 8 bytes Original uncompressed file size
Compressed
Size 8 bytes Size of compressed data
Relative Header
Offset 8 bytes Offset of local header record
Disk Start
Number 4 bytes Number of the disk on which
this file starts
이는 확장 정보 항목 크기가 항상 28바이트일 것으로 예상해야 함을 의미합니다.
그러나 실제 Zip64 아카이브를 분석할 때 파일 오프셋이 0xffffffff인 중앙 디렉터리 항목을 발견했습니다. 다음 단계는 추가 데이터 필드에서 0x0001 헤더 ID를 찾는 것입니다(예상 데이터 크기는 28바이트). 그러나 (0x0001 header-id, 8바이트 크기 및 값이 0x02ab6bd436인 1개 필드로 변환됨) 로컬 파일 헤더 오프셋을 올바르게 나타내는 것으로
나타났습니다 . 00 01 00 08 00 36 d4 6b ab 02 00 00 00
문서에 다른 필드가 언급되지 않은 이유는 무엇입니까 Zip64 Extra Information Field
? 저는 Linux 시스템에서 사용할 수 있는
표준 유틸리티를 사용하고 있습니다.zip
답변1
더 이상 답변이 필요하지 않지만 미래의 독자를 위해 필요하다고 확신합니다. 사양에 따르면 64개의 추가 블록 필드는 필요할 때만 존재해야 합니다.
4.5.3 -Zip64 Extended Information Extra Field (0x0001):
The following is the layout of the zip64 extended
information "extra" block. If one of the size or
offset fields in the Local or Central directory
record is too small to hold the required data,
a Zip64 extended information record is created.
The order of the fields in the zip64 extended
information record is fixed, but the fields MUST
only appear if the corresponding Local or Central
directory record field is set to 0xFFFF or 0xFFFFFFFF.
Note: all fields stored in Intel low-byte/high-byte order.
Value Size Description
----- ---- -----------
(ZIP64) 0x0001 2 bytes Tag for this "extra" block type
Size 2 bytes Size of this "extra" block
Original
Size 8 bytes Original uncompressed file size
Compressed
Size 8 bytes Size of compressed data
Relative Header
Offset 8 bytes Offset of local header record
Disk Start
Number 4 bytes Number of the disk on which
this file starts
따라서 로컬/중앙 디렉터리 레코드에 0xFFFF 또는 0xFFFFFFFF로 표시된 내용만 64 extra 블록에 나타나야 합니다.
언급한 경우 나머지 필드(비압축, 압축 및 디스크)는 로컬/중앙에서 제대로 알려지고 읽어야 합니다.