아직 작성 중입니다.
3. Local File
1. Overview
전편에서 ZIP의 전체 구조를 살펴봤다. ZIP파일은 n개의 Local file entry와 1개의 Central directory로 구성되어 있다능. Local file entry는 Local file header와 File data, Data descriptor로 구성되어 있다고 했따능. 일단 그림을 다시 한번 살펴보자능.
그림 4 Local File Entry
Local file header는 파일의 메타 데이터를 담고 있고 실제 데이터는 File data에 저장되어 있다. Data descriptor는 Local file header의 어떤 필드의 값에 의해서 있을 수도 있고 업ㅂ을 수도 있다. 각 섹션들이 어떤 필드들로 구성되어 있고, 각 필드 길이와 의미만 알면 그리 어렵지 않게 ZIP파일을 읽어낼 수 있다. 어떤 ZIP 파일의 local file entry를 통체로 들고 올태니 그걸 반찬삼아 각 섹션들을 분석해 보자능.
2. Local file header
시험삼아 만든 ZIP 파일의 Local file entry 중 하나를 들고 왔다. 동일한 파일을 아래에 링크해 놓을태니 전체를 보고 싶으면 거걸 받아서 HxD 같은 툴을 사용하면 된다능. 일단 눈으로 읽기 쉽게 필드별로 색을 입혀 놓았다.
offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 50 4B 03 04 0A 00 00 00 00 00 EA 72 25 3D CB 1A PK........er%=E.
00000010 49 DD 0B 00 00 00 0B 00 00 00 09 00 00 00 66 69 IY............fi
00000020 6C 65 31 2E 74 78 74 66 69 6C 65 31 0D 0A 74 65 le1.txtfile1..te
00000030 73 74 st
Local file header는 local file header signature로 시작한다. local file header signature의 값은 0x04034B50 인데, ZIP파일 포맷은 멀티 바이트 필드들은 little endian으로 저장하게 되어 있다. 따라서 눈으로 읽으면 순서가 거꾸로 뒤집힌 값을 보게 된다능. offset 0x0에서 나오는 50 4B 03 04 가 signature가 된다. 이런식으로 필드들을 해석하면 된다능. 역시 Local file header의 전체 구조를 살펴보고 이야기를 진행하자. 이제부터는 좀 지루한 내용이 될꺼라능.
|
Field |
size |
comment |
|
local file header signature |
4 bytes |
0x04034b50 |
|
version needed to extract |
2 bytes |
|
|
general purpose bit flag |
2 bytes |
|
|
compression method |
2 bytes |
|
|
last mod file time |
2 bytes |
|
|
last mod file date |
2 bytes |
|
|
crc-32 |
4 bytes |
|
|
compressed size |
4 bytes |
|
|
uncompressed size |
4 bytes |
|
|
file name length |
2 bytes |
|
|
extra filed length |
2 bytes |
|
|
file name |
variable size |
|
|
extra filed |
variable size |
|
표 1 Local file header
필드가 참...빌어도 못 먹을 만큼 많다. compressed size와 같이 직관적으로 의미도 알 수 있고 해석도 가능할 것 같은 것도 있고 general purpose bit flag 처럼 정체 불명인 것도 있다. 파일의 내용만을 복구할 거라면 compression method하고 file name만 가지고도 충분하지만...위에서 설명한 local file header signature를 제외한 12 필드의 의미를 다 살펴보고 넘어가자능.
1. version needed to extract
2. general purpose bit flag
3. compression method
4. last mod file time
5. last mod file date
6. crc-32
7. compressed size
8. uncompressed size
9. file name length
10. extra filed length
11. file name
12. extra filed
3. File data
4. Data descriptor
'튜토리얼 > Reading ZIP File Format' 카테고리의 다른 글
| Reading ZIP File Format #3, Local File Entry (0) | 2010/12/19 |
|---|---|
| Reading ZIP File Format #2, 전체 구조 (2) | 2010/10/24 |
| Reading ZIP File Format #1, 소개와 역사 (4) | 2010/10/16 |

linux_plugin_example.zip
댓글을 달아 주세요