Professional Documents
Culture Documents
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)
- 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)
- 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:
- 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)
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)
0x10 Subdirectory
0x20 Archive
Đầ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ừ 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