0% found this document useful (0 votes)
9 views

Week 11

Uploaded by

vofelad511
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views

Week 11

Uploaded by

vofelad511
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 55

Week 11

FAT32 Boot Sector,


Locating Files and Dirs

Classes COP4610 / CGS5765


Florida State University

1
Outline

 Recap of last week’s lecture


 Introduction to project 3
 Introduction to FAT32
 Starting Project 3
 How to parse the boot sector
 More on serialization
 Finding the root directory and files
 Understanding open, close, read, write

2
Recap – Intro to Project 3
and FAT32

3
Project 3

 You will create a user-space utility to


manipulate a FAT32 file system image
 No more kernel programming!

4
FAT32 Manipulation Utility

Utility only recognizes the following built-in


commands:

 open  cd
 close  ls
 create  mkdir
 rm  rmdir
 size  read
 write
5
File System Image

 Manipulation utility will work on a pre-


configured FAT32 file system image
 Actually a file
 File system image will have raw FAT32 data
structures inside
 Just like looking at the raw bytes inside of a disk
partition

6
File System Image

 Your FAT32 manipulation utility will have to


 Open the FAT32 file system image
 Read parts of the FAT32 file system image and
interpret the raw bytes inside to service your
utility’s file system commands…

…just like a file system!

7
Terminology

 Byte – 8 bits of data, the smallest


addressable unit in modern processors
 Sector – Smallest addressable unit on a
storage device. Usually this is 512 bytes
 Cluster – FAT32-specific term. A group of
sectors representing a chunk of data
 FAT – Stands for file allocation table and is a
map of files to data

8
FAT32 Disk Layout

 3 main regions…

Reserved FAT Data


Region Region Region

Track Disk arm

Sector
Reserved Region

 Reserved Region – Includes the boot


sector, the extended boot sector, the file
system information sector, and a few other
reserved sectors
Reserved FAT Data
Region Region Region

Additional
FS Information
Boot Sector Reserved Sectors
Sector
(Optional)
FAT Region

 FAT Region – A map used to traverse the


data region. Contains mappings from cluster
locations to cluster locations

Reserved FAT Data


Region Region Region

Copy of File Allocation


File Allocation Table #1
Table #1
Data Region

 Data Region – Using the addresses from


the FAT region, contains actual file/directory
data

Reserved FAT Data


Region Region Region

Data until end of partition


Where to begin?

1. Mount the file system image with the OS


FAT32 driver and take a look around
2. Find the FAT32 spec from Microsoft inside
the image, read it

13
File System Image Mount Example

$> sudo mount -o loop fat32.img /mnt


$> cd /mnt

 fat32.img is your image file


 /mnt is your mounting directory
 Once the file is mounted, you can go into the
/mnt directory and issue all your normal file
system commands like:
 ls, cat, cd, …

14
Hint

 As you work, it might make sense to first take


a look at the raw file system image
 Hexedit to the rescue!

15
Hexedit

$> hexedit [filename]

 View files in hexadecimal or ASCII


 Why wouldn’t you want to view the file
system image file in your regular editor?

16
Hexedit

17
Line
Hexedit numbers in
hex

18
Hexedit Content in
hex

19
Content in
Hexedit printable
ASCII

20
Hexadecimal Hints

 Hex is base 16 – one hexadecimal can


represent 0-15
 It takes 4 binary bits to represent values 0-15
 0000 = 0
 1111 = 15

21
Hexadecimal Hints

 If it takes 4 bits to represent one


hexadecimal number, it takes 8 bits to
represent two hexadecimal numbers
 8 bits = 1 byte
 Two hex numbers together symbolize one
byte
 That’s why hex numbers are in groups of two

22
Endianness

 FAT32 is represented in little endian byte


order
 Reading left to right, you encounter least-
significant byte first
 What 32-bit number is this? 0x0000040 or
0x40000000?

23
Endianness

 Why are characters in order (readable) if


some numbers are not?

24
Endianness

 You must account for little endianness


across bytes when reading in numbers of
size larger than one byte
 Characters are only one byte, no re-ordering
necessary

25
Starting Project 3

26
Parse the Boot Sector

 We need to gather important information


about the file system in the boot sector

27
Important Boot Sector Information

 Size of each region


 BPB_BytesPerSec
 BPB_SecPerClus
 BPB_RsvdSecCnt
 BPB_NumFATS
 BPB_FATSz32
 Root directory (first directory in tree)
 BPB_RootClus
 Warning: this list is not exhaustive!
28
Important Boot Sector Information

 BPB_BytesPerSector
 Offset 11, size 2 bytes
 0x0200 = 512

29
Next Steps

 After you have parsed the boot sector and


saved key values, you may want to find the
root directory
 Everything starts here…

30
Finding the Root Directory

1. Figure out the root directory cluster


number from the boot sector

31
Finding the Root Directory

 BPB_RootClus
 Offset 44, size 4 bytes
 0x00000002 = 2

32
Finding the Root Directory

2. Figure out where the root directory starts in


the data region, where N=cluster number
 (We just found N=2)

FirstSectorofCluster = ((N – 2) * BPB_SecPerClus) +


FirstDataSector;

33
Finding the Root Directory

3. Read in the root directory structure located


at the first sector of the root directory cluster

34
Finding the Root Directory

4. Does the root directory span more than one


cluster? Look up the next cluster number
in the FAT.
 Find ThisFATSecNum and ThisFATEntOffset for
the current cluster number
 Go to ThisFATSecNum and read the 32-bit
unsigned value starting at offset
ThisFATEntOffset
 FAT will either give you the next cluster number in
the directory or the End of Cluster Chain value

35
What exactly is the FAT?

 Files and directories may span multiple


clusters
 FAT is a database or array of pointers to the
next cluster number of the file or directory

36
Finding the Root Directory

 Next cluster number of root directory in FAT


 EoC=0x0FFFFFF8 – directory does not go on

37
Finding the Root Directory

 Next cluster number of root directory in FAT


 EoC=0x0FFFFFF8 – directory does not go on

…otherwise this
would be the
next cluster
number…

38
Directory Structure

 Each directory is made up of one or more


directory entries that contain
 File name (or sub-directory name)
 Attributes
 First cluster number
 Cluster number where file or directory in question starts
 More…

39
Finding Files and Directories

 Files and sub-directory entries can be found


by going to their first cluster number
 Found in the directory entry

40
Finding fatgen103.pdf

 Suppose we have read in the root direcotry


and want to find the file ‘fatgen103.pdf’

41
Finding fatgen103.pdf

 Suppose we have read in the root direcotry


and want to find the file ‘fatgen103.pdf’

Directory entry for


fatgen103.pdf

42
Finding fatgen103.pdf

 Entry’s first cluster number


 0x000011 = 17

High word Low word

43
Finding fatgen103.pdf

 Plug N=17 into FirstSectorofCluster


equation, go to that sector…

44
Finding fatgen103.pdf

 Does the file continue after this cluster?


 Look up current cluster number 17 in FAT…
Continues to
cluster 0x12=18!

45
Summary of Finding Files/Dirs

1. Find first cluster number in directory entry of


interesting file or directory
2. Figure out the sector to read using cluster number
and FirstSectorofCluster equation
3. Read that cluster
4. Figure out if file or directory continues past cluster
by looking up FAT[current cluster number]
 If EoC mark stop
 Else go to 3 with cluster=FAT[current cluster number]

46
File System Utility
Operations

Open, Close, Read, Write

47
Starting our Utility

$>./fat32_reader fat32.img
/]

 Fat32_reader is name of our utility


 Should return a different prompt (like “/]”) to
symbolize that user is inside utility

48
Handling Open Files

 An open file is a file we allow I/O operations


to be performed on
 read
 write
 To handle open files, we must maintain a
table of files that are open
Opening Files

/] open “fatinfo.txt” rw

 If “fatinfo.txt” is found in the current


directory, open “fatinfo.txt”
 In order to find fatinfo.txt, you must be able to
interpret the current directory and determine
whether fatinfo.txt is part of that directory
 Once you open fatinfo.txt, store its name (at
least) in the open file table
I/O on Open Files

/] read “fatinfo.txt” 0 100

 Only allow the read if fatinfo.txt is open


 In order to read fatinfo.txt, you must look
into the open file table, look up the address
of fatinfo.txt (or store it with its name), and
read enough of the data clusters to satisfy
the read request
I/O on Open Files

/] write “fatinfo.txt” 0 “Hello”

 If write stays within the cluster


 Just write data
 If write goes beyond cluster
1. Find a free cluster, remember as
next_cluster_number
2. Change FAT[current_cluster] from EoC to
next_cluster_number
3. Change FAT[next_cluster_number] to EoC
4. Write the data in the cluster next_cluster_number

52
Closing Files

/] close “fatinfo.txt”

 Remove this file’s entry from the open file


table

53
To Do

 Write code to parse the boot directory


 Cannot go anywhere without this code
 Write code to open and close files
 Write code to read directories and files
 Try writing to files and directories

54
Next Time

 Discussion of other file operations

55

You might also like