둘둘리둘둘리둘둘리둘둘리둘둘리둘

FAT32 구조 본문

Windows

FAT32 구조

dool2ly 2014. 6. 24. 23:24

FAT32 구조


FAT32 Boot Record 구조


실제 테스트 환경의 PBR영역


2048섹터의 PBR, PBR의 위치는 Partition table entry(링크)를 참조

해당 테스트 환경은 Windows7의 2GB FAT32포맷 파티


1. Jump boot code

Jump boot code영역의 기계어코드 EB 58 90을 IDA로 연 결과 'jmp short near ptr 5Ah'

Jump boot code가 끝나는 부분에서 5A 이동한 곳 부터 Boot code가 시작

(EB 58 90이 JMP(EB) 58인것 같기도함, JMP결과가 BPB가 끝나는 부분과 일치)

해당 볼륨을 이용해서 부팅할 일이 없다면 어떤값이 와도 무방함.

BPB: BIOS Parameter Block, FAT32구조에서 Jump boot code를 제외한 나머지 86Byte


2. OEM Name

OEM회사를 나타내는 문자열, Windows에선 보통 MSWIN4.1또는 MSDOS5.0


3. Byte per sector

한 섹터에 몇바이트인지를 나타냄, 0x0200으로 한섹터당 512Byte

보통 대부분 섹터의 최소단위가 512Byte로 잡혀있음


4. Sector per cluster

한 클러스터가 몇 섹터크기인지를 나타냄, 0x08로 클러스터당 8 섹터로 클러스터의 크기는 512 * 8 = 4KB가 되고 클러스터의 크기는 볼륨의 크기와 포맷의 종류에따라 결정됨


Cluster: 섹터를 묶은것, 섹터 크기를 키우기엔 범욤성이 떨어지므로 클러스터 단위로 묶어씀

보통 Default Value가 4KB, 확인 방법으로 1byte짜리 텍스트 문서도 디스크 할당크기는 4KB.

클러스터의 남는공간이 Slack space


5. Reserved sector count

예약섹터의 수, FAT32의 경우는 0,1,2,6,7,8 총 6개의 섹터를 Reserved sector로 사용하고 나머지 26개는 만약을 대비해 예약됨

예약섹터의 수는 항상 일정한것은 아니고 포맷 소프트웨어에따라 변할 수 있다.

OS에 따라서도 다른데 Windows7에서는 Reserved area의 전체 크기를 나타내고 XP에서는 위처럼 32를 나타냄


6. Number of FATs

말그대로 FAT의 갯수, 보통 0x02가 오며 2번째 FAT는 첫번째 FAT의 백업용도로 쓰임


7. Root directory count

FAT16에서만 사용됨


8. Total sector 16

FAT16에서만 사용됨


9. Media type

어떤 미디어에 저장되어 저장되어있는지를 나타냄, 플로피 디스크를 제외한(USB,CF 카드 포함) 저장장치면 모두 0xF8(고정식 디스크)값을 씀, 0xF8제외하고는 모두 플로피디스크를 나타내는 값이다


10. FAT Size 16

FAT16에서만 사용됨


11. Sector per track

한 트랙당 섹터의 개수, Windows에선 더 이상 사용 안 함


12. Number of heads

저장장치의 헤더 수를 저장, Windows에선 더 이상 사용 안 함


13. Hidden sector

해당 볼륨앞의 숨겨진 섹터 수, 실제로 숨겨졌다는 뜻이 아니라 MBR을 비롯한 볼륨으로 사용되지 않는 섹터의 개수, Windows에선 더 이상 사용 안 함


14. Total sector 32

해당 파티션의 총 섹터의 수, 0x00400000개의 섹터를 가지고 있으므로 해당 파티션의 용량은

400000*512 = 2,147,483,648 byte (2GB)


15. FAT Size 32

FAT 하나가 가지고있는 섹터의 수


16. External flag (EXT flag)

FAT사용 방식에 대한 설정,여러개의 FAT영역을 사용할경우 설정

EXT flag의 구조:

Active FAT Number(4 bit): 활성화 시킬 FAT번호로 0부터시작(Flag값이 1인 경우에만)

Reserved(3 bit): 임시 예약

Flag(1 bit): 0 -> 변경 내용을 모든 FAT에 반영, 1 -> Avtive FAT Number에 설정된 FAT에만 반영

Reserved(8 bit): 임시 예약


17. File System Version

FAT32의 버전 정보, 이 영역이 자신이 인식할 수 있는 버전보다 높으면 파티션인식 안함.

현제까지 FAT버전은 모두 0x0000


18. Root directory cluster

Root directory(최상위 디렉토리)가 시작되는 클러스터 번호, 보통 2번 클러스터 부터 시작

첫번째 Cluster = 2*(512*8) 


19. File system information

FS구조체가 위치한 섹터 번호, 보통 0x0001로 1번섹터


20. Boot record backup sector

PBR이 백업된 sector의 위치,어디든 상관없지만 보통 0x0006이며 0x0000일경우 백업 되지 않음


21. Reserved

만약을 위한 예약영역, 항상 00


22. Number of drives

Windows에선 더 이상 사용 안 함


23. Reserved

Windows NT계열에서 사용하려고 만들어짐, 더 이상 사용 안 함


24. Boot signature

확장 부트 서명, 항상 0x29, '여기가 끝이아니라 뒤에 세가지 항목이 더 추가 되었다'를 의미


25. Volume ID

볼륨의 고유번호


26. Volume label

볼륨 이름, 이항목을 변경 하려면 루트 디렉토리까지 변경해야됨


27. File system type

보통 FAT32지만 이 항목이 FAT의 형태에 아무런 영향도 끼치지 않음




File system information Structure

BR의 File system information영역에 설정된 위치에 존재함 보통 BR바로 다음섹터에 있다.



실습환경 데이터



1. Lead signature

FSINFO structure의 시작임을 알림. 반드시 0x41615252


2. Reserved1

임시공간, 사용안함


3. Structure signature

이 항목 이후의 항목들이 클러스터 사용 현황에 대한 내용임을 나타냄. 반드시 0x61417272


4. Free cluster count

해당 볼륨중 비어있는 클러스터의 개수


5. Next free cluster

다음 빈 클러스터의 위치, 빈 클러스터를 빨리 찾기 위한 항목


6. Trail signature

FSINFO의 끝, 반드시 0xAA550000

'Windows' 카테고리의 다른 글

PE header관련 구조체  (0) 2015.10.17
PE 파일 구조 - 2  (0) 2015.10.13
PE 파일 구조 - 1  (0) 2015.10.13
FAT32의 저장방식  (0) 2014.06.25
Partition Table Entry와 FAT16 BR구조  (0) 2014.06.22
Comments