You are on page 1of 4

3.

1 Fat32
3.1.1 FATVolume
Đây là một lớp con thừa kế lớp cha Volume và ghi lại lại các abstract thuộc tính của lớp
cha bằng cách khởi tạo lại giá trị đầu vào là NULL (None in python)

Vùng Boot Sector:

- Gồm một số sector đầu tiên của phân vùng (partition), trong đó gồm:
+ Sector đầu tiên: chứa các thông số quan trọng phân vùng và chứa đoạn chương
trình nhỏ để nạp Hệ điều hành khi khởi động máy
+ Các Sector còn lại (nếu có): chứa các thông tin hỗ trợ cho việc xác định tổng số
cluster trống và tìm kiếm cluster trống, chứa 1 bản sao của Boot sector

- Đọc sector đầu của vùng Boot Sector và lưu thông số quan trọng của volume:
+ Đầu tiên đọc 2 bytes tại offset 0x1FE ( Offset kết thúc Boot Sector), nếu khác 43605
thì báo lỗi
+ Tiếp theo đọc số byte của 1 sector mỗi giây (bps): Tại offset 0xB (2 bytes)
+ Số sector mỗi cluster (sc): tại offset 0xD (1 bytes)
+ Số sector trong bootsector (sb): tại offset 0xE (2 bytes)
+ Số lượng bảng fat (nf): tại offset 0x10 (1 bytes)
+ Kích thước mỗi bảng fat (sf): tại offset 0x24 (4 bytes)
+ RDET cluster: Cluster bắt đầu của RDET tại offset 0x2C (4 bytes)
+ Sector đầu tiên: được tính bằng sb + nf*sf
+ Kích thước volume: sv = 0 (sv > 65535) tại offset 0x20 (4 bytes)

Information Byte Offset Field Length Field Name

bps 0xB 2 bytes Bytes Per Sector


sc 0xD 1 byte Sectors Per Cluster
sb 0xE 2 bytes Reserved Sectors
nf 0x10 1 byte Number of FAT
sf 0x24 4 bytes Size Per FAT
sv 0x20 4 bytes Size of Volume
Hàm Read_cluster_from_fat:

- Hàm kiểm tra từ bảng FAT để tìm một cluster trong một entry xác định, bắt đầu
từ cluster thứ n đã cho
- Tham số truyền vào : n (integer), trả về list: cluster ( kết hợp bởi nhiều sectors)
- Offset kết thúc nằm trong [0xFFFFFFF, 0xFFFFFF7, 0xFFFFFF8]
- Nếu n nằm trong offset kết thúc hoặc nhỏ hơn 2 thì trả về list trống, nếu không
thì next_cluster = n và list chain = [next_cluster]
- Sau đó đọc byte tại offset next_cluster*4 (4 byte) và gán lại vào next cluster
- Nếu next_cluster rơi vào offset kết thúc thì break và trả về chain, ngược lại thì
thêm vào chain tới khi next_cluster gặp offset kết thúc và trả về chain

Hàm change_cluster_chain_to_sector_chain:

- Hàm chuyển chuỗi cluster thành chuỗi sector

- Tham số truyền vào: cluster_chain(_list): các cluster lưu trữ thành list

3.1.2 FATDirectory
- Đây là một lớp con thừa kế lớp cha Directory và ghi lại lại các abstract thuộc tính của
lớp cha bằng cách khởi tạo lại giá trị đầu vào là NULL (None in python)

- Minh họa thư mục trong hệ thống FAT

Hàm get_subentries:
- Lấy tất cả các subentries từ dữ liệu
- Đọc thuộc tính tại offset 0xB (1 bytes)

Byte Offset Attribute

0x10 Subdirectory

0x20 Archive

0x0F Support entry


3.1.3 FATFILE
Đây là một lớp con thừa kế lớp cha File và ghi lại lại các abstract thuộc tính của lớp cha
bằng cách khởi tạo lại giá trị đầu vào là NULL (None in python)

Đọc thư mục RDET, SDET:

Đầu tiên kiểm tra entry chính hoặc phụ tại offset 0xB ( 1 bytes)

+ Đọc tên của tập tin/ thư mục: tên chính tại offset 0 (8 bytes) và tên mở rộng tại offset
(3 bytes)

* Nếu có entry phụ thì đọc tên của tập tin/ thư mục của entry phụ bằng hàm
read_subentry_to_name

+ Xác định thuộc tính entry tại offset 0xB ( 1 bytes) bằng cách đổi về nhị phân

+ Tại offset 0x1B (2 bytes) xác định phần highbyte của cluster bắt đầu

+ Tại offset 0x1A (2 bytes) xác định phần lowbyte của cluster bắt đầu

-> Từ đó biết được cluster đầu tiên: highbyte*0x100 + lowbyte

+ Từ chỉ số cluster đầu tiên, xác định các phần tử của tập tin tương ứng các cluster của
tập tin bằng hàm Read_cluster_from_fat

Hàm read_subentry_to_name:

- Hàm kết hợp các subentries để cung cấp thông tin của tệp hoặc thư mục
- Tham số truyền vào subentries(list): list of subentries
Byte Offset Field Length Information

0x1 10 5 ký tự

0xE 12 6 ký tự kế tiếp

0x1C 4 2 ký tự kế tiếp

Hàm dump_binary_data: Trả về dữ liệu của tệp văn bản theo byte

Hàm show_attr: Lưu list các attributes

You might also like