FAT32 File System Structure

Slides:



Advertisements
Similar presentations
10-7 부동소수점 (Floating-Point) 계산  컴퓨터에서 숫자를 표기하는 방법  가수 (Fraction) : 부호화된 고정소수점 숫자 지수 (Exponent) : 소수점의 위치를 표시 ( 예 )10 진수 를 표기하면 Fraction Exponent.
Advertisements

일정 관리 다이어리 제작 JSP Programming with a Workbook. 학습 목표  사용자의 일정을 관리할 수 있는 다이어리에 대하여 알아보자. JSP Programming with a Workbook2.
Wireless & Mobile Communication system LAB TinyOS 의 메시지 형식 및 자바 응용 프로그램들 조선대학교 정보통신공학과 변재영 본 자료는 한백전자 교육자료를 이용하여 제작되었음을 밝힙니다.
2. 미디어 쿼리 : 다양한 뷰포트의 지원 김은옥 1 학습목표 : 여기서는 미디어 쿼리 작성방법, 뷰포트 지정 방법 등 을 살펴본다.
Big Data & Hadoop. 1. Data Type by Sectors Expected Value using Big Data.
운영체제 파일관리 이승언. 목차 1. 파일 시스템 1) 파일 시스템의 정의와 기능 2) 파일 읽기 / 쓰기 3) 파일 관리 2. 윈도우의 파일 시스템 1) 윈도우 파일 시스템 종류 2) 윈도우 파일 시스템 비교 3)FAT ①포맷된 디스크의 구조 ②포맷된.
PE 로 Windows 7/8 운영체제 만들기 4 조 : 박 성 진. 1.PE로 부팅 합니다. 1) Windows7 PE CD 를 삽입 합니다. 2) BISO 설정에서 부팅순서를 CD-ROM 또는 USB 를 1 순위로 올려준다. 3) 부팅이 될 때 까지 기 달려요.
오라클 백업과 복구.
정보 보안 개론과 실습 네트워크 해킹과 보안 3부 해킹 전 정보 획득 Chapter 10. 목록화.
재료수치해석 HW # 박재혁.
뇌를 자극하는 Windows Server 2012 R2
소리가 작으면 이어폰 사용 권장!.
New MapTool manual Kim Dong-Sung.
Entity Relationship Diagram
CUDA Setting : Install & Compile
Windows Server 장. 사고를 대비한 데이터 백업.
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
임베디드 시스템 개론 크로스 플랫폼 설치 2일차 강의 자료 Embedded System Lab.
강 명 수 LINUX 설치 강 명 수
Root Filesystem Porting
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Error Detection and Correction
Root Filesystem Porting
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
Bat 파일을 이용한 로그 파일 관리.
PySpark Review 박영택.
뇌를 자극하는 Windows Server 장. 장애 조치 클러스터.
CHAP 12. 리소스와 보안.
rc script, 특정 port로 telnet
어서와 C언어는 처음이지 제14장.
7가지 방법 PowerPoint에서 공동 작업하는 다른 사용자와 함께 편집 작업 중인 사용자 보기
27장. 모듈화 프로그래밍.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
2018년 11월 05일 박성진 Web & Internet [08] 레이아웃 P1 2018년 11월 05일 박성진
뇌를 자극하는 Windows Server 2012 R2
24장. 파일 입출력.
CHAP 5. 레이아웃.
Chapter 11. Windows Server 2000 & 2003
Day-27(Tue_10.16) 파일 서비스 설정 AD 가 설치된 환경에서 DHCP 설치 할 경우 권한 자격을 주어야함.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
컴퓨터 시스템 하드웨어 컴퓨터 시스템 소프트웨어 C P U Control Unit 입 력 장 치 출 력 장 치 ALU
Root passwd 분실, bootblk 복구
PADS Logic 회로도.
8장. spss statistics 20의 데이터 변환
PMIS 서버 설정 환경설정 작성자 : 배경환.
CHAP 21. 전화, SMS, 주소록.
S-Work 2.0 DRM 신규 버전 설치 가이드 SOFTCAMP
Kernel, Ramdisk, JFFS2 Porting
데이터 동적 할당 Collection class.
Ping Test.
Addressing the Network – IPv4
뇌를 자극하는 Solaris bible.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
14 뷰(View) 뷰의 개념 뷰 관리.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
서적DB개발 과제 Page 2의 ERD를 통해 구축할 서적 DB의 구조를 파악한다. (4개의 개체에 대해 확인함)
슬라이드 쇼의 설정 슬라이드 쇼의 실행 파일과 폴더의 관리 글꼴을 포함해서 저장 웹 페이지로 게시 압축 파일
Numerical Analysis Programming using NRs
제 4 장 Record.
소리가 작으면 이어폰 사용 권장!.
과제물 3호 3번 문제 설명자료.
 6장. SQL 쿼리.
Reversing 발표자 : 박현우.
Docker Study 6~7.
CCISS 어레이 형식 centos7 설치방법
ARP.
Presentation transcript:

FAT32 File System Structure CodeAche @ WiseGuyz codeflaws at gmail.com 홍정우

1. Layout BOOT CODE (446 byte FAT1 FAT2 FAT1 FAT2 Partition Table 1 알아야 할 것들. * 섹터 : 1sector는 512 byte * cluster : 1 cluster는 8 sector 즉 4096byte 파티션마다 변경 가능함 * 0xAA55 : MBR이나 PBR은 반드시 AA55로 끝나야 정상적인 디스크로 인식이 됨. 단순한 시그니쳐. * 향후 설명되는 모든 바이트들은 little endian기준이므로 0xAA55라면 실제로 디스크에는 55 AA 라고 기록됨. * 본 그림은 전체적인 레이아웃만을 설명하기 위한 것이므로, 크기에 대한 개념은 무시해도 무관함. 실제로 MBR을 엄청 크게 그렸지만 MBR과 PBR은 전체 디스크에서 보면 도식화 하지 못 할정도로 작은 부분임. MBR과 PBR은 512byte로 크기가 같지만 그림에선 전체 개념도를 위해 크기를 다르게 나타냄. * 하나의 디스크는 파티션을 4개 가질 수 있고,현재 도식화된 그림에는 2개의 파티션만 그려넣었지만 실제론 4개가 존재 할 수 있음. BOOT CODE (446 byte Partition Table 1 MBR (512byte) Partition Table 2 Partition Table 3 Partition Table 4 0xAA55 PBR RESERVED Area FAT1 FAT2 Root Entry PARTITION 1 Clusters PBR RESERVED Area FAT1 FAT2 PARTITION 2 Root Entry Clusters

1. Layout BOOT CODE (446 byte FAT1 FAT2 Partition Table 1 (Valid) 파티션을 나누지 않은 상태에서 파티션 테이블은 한 개만 정상이고, 나머지는 Invalid한 상태로 남게된다. ( 디스크를 구매하여 처음 사용하는 상태) 앞으로는 이 구조로 설명을 진행함 BOOT CODE (446 byte Partition Table 1 (Valid) MBR (512byte) Partition Table 2 (Invalid) Partition Table 3 (Invalid) Partition Table 4 (Invalid) Partition Table (16byte) 0xAA55 PBR RESERVED Area FAT1 FAT2 Root Entry PARTITION 1 Clusters

1. LAYOUT ( MBR ) BOOT CODE (446 byte FAT1 FAT2 : 디스크의 첫 1sector (512byte) 부팅을 위한 코드들이 들어 있으며, 그 뒤에는 파티션을 위한 테이블이 위치해 있다. 파티션 테이블은 4개가 존재하며, 각기 16 바이트이다. 즉 부팅코드 446 + 16바이트짜리 파티션 테이블 4개 + 시그니쳐 2바이트 = 512 다른 건 볼게 없고, AA55 가 마지막에 와야 정상적인 디스크로 인식된다 라는 사실과, 파티션 테이블이 중요한데, 파티션 테이블이 어떻게 구성 되어 있는지 알아보자. BOOT CODE (446 byte Partition Table 1 (Valid) MBR (512byte) Partition Table 2 (Invalid) Partition Table 3 (Invalid) Partition Table 4 (Invalid) 0xAA55 PBR RESERVED Area FAT1 FAT2 Root Entry PARTITION 1 Clusters

1. LAYOUT (Partition Table Structure) Boot Flag Type Code CHS BEGIN CHS End LBA BEGIN Number of Sector Partition Table (16byte) Type Code : 0x06 이면 이 파티션이 FAT16 0x0B 혹은 0x0C 이면 이 파티션이 FAT32 Boot Flag , CHS BEGIN , END 는 중요하지 않음. Number of Sector 의 4바이트가 해당 파티션이 가지고 있는 섹터의 크기임. 여기에 512를 곱하고 이를 1024*1024 로 나누면 이 파티션의 크기를 메가바이트 단위로 구할 수 있음. 이것도 별로 중요치 않음. LBA BEGIN 이 가지고 있는 4바이트가 해당 파티션의 시작 주소임.

1. LAYOUT (PARTITION) BOOT CODE (446 byte FAT1 FAT2 PBR : 파티션에 대한 정보들이 들어있다. BOOT CODE (446 byte 역할 OFFSET 값 한 섹터당 바이트수 0x0B 512로 고정 클러스터 당 섹터수 0x0D 보통 8 예약영역이 몇 섹터인지 0x0E 보통 0x20 FAT 의 개수 0x10 무조건 2 FAT 하나당 섹터수 0x24 하드마다 다름 루트엔트리의 위치 0x2c 보통 x00000002 시그니쳐 0x1FE 0xAA55 고정 Partition Table 1 (Valid) MBR (512byte) Partition Table 2 (Invalid) Partition Table 3 (Invalid) Partition Table 4 (Invalid) Partition Table (16byte) 0xAA55 PBR RESERVED Area FAT1 FAT2 Root Entry PBR = 512 바이트 예약영역 크기 알 수 있음 FAT1 == FAT2 FAT1의 크기 알 수 있음. Cluster의 위치를 계산 할 수 있음. Clusters

1. LAYOUT (PARTITION) BOOT CODE (446 byte FAT1 FAT2 Reserved Area : 안 쓰는 영역 : PBR에 이 영역이 사용중인 섹터의 개수가 저장되어 있으므로, FAT1의 위치를 계산 할 수 있다. 즉, PBR , Reversed Area , FAT1 , FAT2는 고정적으로 붙어 있음. Root Entry 역시 붙어 있지만 FAT32에서는 루트 엔트리를 임의로 수정할 수 있음. 하지만 통상 붙어있음. BOOT CODE (446 byte Partition Table 1 (Valid) MBR (512byte) Partition Table 2 (Invalid) Partition Table 3 (Invalid) Partition Table 4 (Invalid) Partition Table (16byte) 0xAA55 PBR RESERVED Area FAT1 FAT2 Root Entry Clusters

1. LAYOUT (PARTITION) BOOT CODE (446 byte FAT1 FAT2 : 파일에 대한 클러스터 정보가 들어있음. FAT2는 단순히 FAT1의 복사본. BOOT CODE (446 byte Partition Table 1 (Valid) MBR (512byte) Partition Table 2 (Invalid) Partition Table 3 (Invalid) Partition Table 4 (Invalid) Partition Table (16byte) 0xAA55 PBR RESERVED Area FAT1 FAT2 Root Entry Clusters 0번 , 1번 클러스터는 사용되지 않음. 2번부터 사용됨.

1. LAYOUT (PARTITION) BOOT CODE (446 byte FAT1 FAT2 Root Entry : 루트디렉토리 , 즉 파티션의 최상위 디렉토리 정보가 들어 있음. 디렉터리 엔트리에 대해서 자세히 알아보자. BOOT CODE (446 byte Partition Table 1 (Valid) MBR (512byte) Partition Table 2 (Invalid) Partition Table 3 (Invalid) Partition Table 4 (Invalid) Partition Table (16byte) 0xAA55 PBR RESERVED Area FAT1 FAT2 Root Entry Clusters

1. LAYOUT (PARTITION) FAT1 FAT2 Clusters 루트 엔트리 (실제로는 디렉토리 엔트리 혹은 루트 디렉토리 라고 부름) 역시 테이블형식으로 구성되어 있다. 각 파일, 디렉토리 구조가 32바이트짜리 테이블로 나눠져 있음. 각 테이블의 스펙은 아래와 같다. PBR RESERVED Area FAT1 FAT2 Root Entry Clusters 우리는 확장자 (MP3를 파싱해야하므로) , 시작클러스터 상,하위 주소 만 알면 됨 또한, 각 테이블의 0x00 번째 값이 0xE5면 삭제된 파일이다. * 실제로 OS에서 파일을 삭제하면 파일 데이터 전체가 사라지는 것이 아니라 루트엔트리의 첫번째 값만 0xE5로 변경되는 것. -> 파일복구프로그램 별거아님.

1. LAYOUT (PARTITION) BOOT CODE (446 byte FAT1 FAT2 Clusters : FAT1 에 담긴 정보대로 실제 파일 데이터들이 위치하는 곳. BOOT CODE (446 byte Partition Table 1 (Valid) Partition Table 2 (Invalid) Partition Table 3 (Invalid) Partition Table 4 (Invalid) 0xAA55 PBR RESERVED Area FAT1 FAT2 Root Entry 루트 엔트리의 파일테이블에서 해당 파일의 시작클러스터 주소를 알아낼 수 있고, 그 클러스터 주소를 FAT1 테이블에 적용하여 Linked List로 따라가면 된다. Clusters

2. Trip to the Files 지금까지 알 수 있는 사실 실제 예제를 통해 알아보자 디스크의 시작으로 부터 0x1C6 에 첫번째 파티션에 대한 실제 파티션 주소가 들어 있음 실제 파티션 주소는 PBR 의 주소이고 PBR로부터 다음 정보를 추출할 수 있음 * PBR + ReservedArea의 크기 = FAT1의 주소 * FAT1의 주소 + (FAT 하나당 크기 * 2) = Root Entry의 위치 루트 엔트리에서 각 엔트리의 첫번째 바이트가 0xE5가 아니라면 실제로 존재하는 파일임. 실제로 존재하는 파일이라면 0x08 번째의 3바이트로 확장자를 알 수 있음 (MP3 , AVI , EXE …) 루트엔트리의 0x14 의 두 바이트 , 0x1A의 두 바이트를 상,하위 주소로 결합하여 실제 시작 클러스터의 위치를 알 수 있음. 실제 예제를 통해 알아보자

2. Trip to the Files BOOT CODE (446 byte FAT1 FAT2 Partition 테이블에서 LBA_BEGIN값을 참조하여 해당 파티션의 PBR 위치를 파악. 즉, 디스크의 시작점으로 부터 0x1C6 바이트 뒤에 있는 4바이트 값이 실제 첫 번째 파티션의 주소다. BOOT CODE (446 byte Partition Table 1 (Valid) LBA_BEGIN Partition Table 2 (Invalid) Partition Table 3 (Invalid) Partition Table 4 (Invalid) 0xAA55 PBR FAT1 FAT2 little endian 이며, 섹터에 대한 오프셋이므로, PBR = 0x000009d8 * 512 = 0x13b000 즉, 파티션1의 실제 오프셋은 0x13B000 이다. RESERVED Area Root Entry Clusters

2. Trip to the Files FAT1 FAT2 Clusters PBR Root Entry 역할 OFFSET 값 한 섹터당 바이트수 0x0B 512로 고정 클러스터 당 섹터수 0x0D 보통 8 예약영역이 몇 섹터인지 0x0E 보통 0x20 FAT 의 개수 0x10 무조건 2 FAT 하나당 섹터수 0x24 하드마다 다름 루트엔트리의 위치 0x2c 보통 x00000002 시그니쳐 0x1FE 0xAA55 고정 PBR RESERVED Area FAT1 FAT2 Root Entry Clusters 0x200 = 512 보통 8 이고, 클러스터 당 섹터이므로 1클러스터는 8섹터이고 1섹터는 512바이트이므로 1클러스터는 4096 바이트 FAT1 , FAT2 두개 예약 영역의 크기 0x9C4섹터 = 0x138800 바이트 FAT1의 크기 = 0x3B1E 섹터 = 0x763C00 바이트

2. Trip to the Files FAT1 FAT2 0x763C00 PBR의 주소 : 0x13B000 RESERVED Area PBR의 주소 : 0x13B000 Reserved Area 크기 : 0x138800 Root Entry FAT1 , FAT2의 크기 : 0xEC7800 0x113B000 Clusters 0x763C00 Root Entry의 위치 : PBR 주소 + Reserved Area 크기 + FAT1,FAT2크기 = 0x13B000 + 0x138800 + 0xEC7800 = 0x113B000 FAT1의 위치 : PBR주소 + Reserved Area 크기 = 0x13B000 + 0x138800 = 0x273800

2. Trip to the Files 하나의 파일 / 디렉토리 엔트리 32바이트 맨 앞자리가 0xE5이므로 이 파일은 삭제된 파일 맨 앞자리가 0xE5가 아니므로 실제로 존재하는 파일임. 파일명은 TEST1.MP3와 TEST2.MP3. TEST1.MP3의 경우 시작 클러스터가 0x00000068이다.

2. Trip to the Files 하나의 파일 / 디렉토리 엔트리 32바이트 맨 앞자리가 0xE5이므로 이 파일은 삭제된 파일 맨 앞자리가 0xE5가 아니므로 실제로 존재하는 파일임. 파일명은 TEST1.MP3와 TEST2.MP3. TEST1.MP3의 경우 시작 클러스터가 0x00000068이다. 하지만 0과 1번 클러스터는 사용하지 않으므로 ( 루트엔트리 영역으로 사용됨 ) 실제론 0x66번째 클러스터에 TEST1.MP3의 첫번째 4096바이트가 존재한다. 그렇다면 두번째 4096바이트는??

2. Trip to the Files 0x273800 + ( 4 * 0x68) = 0x2739A0 FAT1 의 첫 8바이트 ( 첫 두개의 클러스터 정보는 사용되지 않는다. , 루트엔트리가 클러스터 두개를 예약해둠. ) 0x273800 + ( 4 * 0x68) = 0x2739A0 즉, 0x68 을 첫 시작 클러스터로 하는 TEST1.MP3는 0x68->0x69->0x6A->0x6B -> ……. -> 0xBD -> 0x0FFFFFFF(끝) 으로 이뤄져 있다. 이 리스트를 따라서 클러스터데이터를 모으면 파일완성.

3. Real Demo