优盘文件系统(FOR C)
2024-10-14 11:11:29
优盘上的数据按照其不同的特点和作用大致可分为5 部分:MBR 区、DBR 区、FAT 区、FDT区和DATA 区。
- 主引导记录(MBR)
绝对扇区号为:MBR_LBA=0x00000000 处是主引导记录,等同位于硬盘的0 磁道0 柱面1 扇区。
在总共512 字节的主引导扇区中,MBR 只占用了其中的446 个字节(ofs:0 - ofs:1BDH),另外的64 个字节(ofs:1BEH - ofs:1FDH)交给了DPT(Disk Partition Table 盘分区表),最后两个字节“55 AA”(ofs:1FEH - ofs:1FFH)是分区的结束标志。
MBR 定义如下:
typedef struct { uchar bootcode[]; //ofs:0.启动代码。“FA 33 C0 8E D0 BC…”. PartitionTable PT[]; //ofs:446.分区表length=4*16. uint EndingFlag; //ofs:510.结束标识:0xAA55. }MBR_tag;
Bootcode[446]启动代码一般是固定的,用于引导 x86,不用管。
分区表项的定义如下:
typedef struct { uchar BootFlag; //启动标志 CHS StartCHS; //分区开始的柱面、磁头、扇区 uchar SystemID; //分区类型 CHS EndCHS; //分区结束的柱面、磁头、扇区 ulong RelativeSectors; //分区起始扇区数,指分区相对于记录该分区的分区表的扇区位置之差 (该分区表:LBA=0x0)。 ulong TotalSectors; //分区总扇区数 }PartitionTable;
其中 CHS 为一个柱面、磁头、扇区的结构,定义如下:
struct CHS { uchar Head; //磁头。 unsigned Sector : ; //扇区。 unsigned CyH2 : ; //柱面(高两位)。 uchar CyL8; //柱面(低八位)。 +CyL8);} //返回柱面值 void SetCylinder(uint Cylinder) //设置柱面值 { CyH2=(Cylinder>>)&0x3; CyL8=(Cylinder&0xff); } };
例:80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00
在这里我们可以看到:
最新文章
- MySQL提示符含义
- d3 API scale
- 冒泡排序优化JAVA
- Linux 改进捕捉信号机制(sigaction,sigqueue)
- 《Linux及安全》实验安排
- [sql server、oracle] 分组取最大值最小值常用sql
- [Firefly引擎][学习笔记一][已完结]带用户验证的聊天室
- IOS的一个带动画的多项选择的控件(一)
- Flashback version/Transaction Query,FlashbackTable
- Js之Screen对象
- 合并Spark社区代码的正确姿势
- [板子]Floyd&;Dijkstra
- K:树与二叉树
- android 图片上传图片 报Socket: Broken pipe
- 保护url时效性和安全性的一种解决方案
- s21day19 python笔记
- 【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis
- java ftp上传文件
- Xshell存在后门
- WebSocket和Socket的区别
热门文章
- 【经验】在CSS中定义a:link、a:visited、a:hover、a:active顺序
- BZOJ 1061 志愿者招募
- hdu 1853 最小费用流好题 环的问题
- 【转】android cts测试方法及步骤
- Controlling Access in Java
- OpenMeetings(3)----启动顺序解析
- Merlin 的魔力: SpringLayout 管理器
- AngularJs登录
- hdu 2846
- [Hapi.js] Request Validation with Joi