📄 file_header.c
字号:
#include"file_header.h"
#include<string.h>
void read_MBR(DBR_tag * MBR_t,char *gFormat)
{
int pt=0,i=0;
//memset(MBR_t,0,sizeof(DBR_tag));
for(i=0;i<3;i++)
MBR_t->bJmpBoot[i]=*(gFormat+pt+i);
pt+=3;
for(i=0;i<8;i++)
MBR_t->bOEMName[i]=*(gFormat+pt+i);
pt+=8;
MBR_t->BPB_wBytesPerSec=0;
for(i=0;i<2;i++)
MBR_t->BPB_wBytesPerSec+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
pt+=2;
MBR_t->BPB_bSecPerClus=*(gFormat+pt);
pt++;
MBR_t->BPB_wReservedSec=0;
for(i=0;i<2;i++)
MBR_t->BPB_wReservedSec+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
pt+=2;
MBR_t->BPB_bNumFATs=*(gFormat+pt);
pt++;
MBR_t->BPB_wRootEntry=0;
for(i=0;i<2;i++)
MBR_t->BPB_wRootEntry+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
pt+=2;
MBR_t->BPB_wTotalSec=0;
for(i=0;i<2;i++)
MBR_t->BPB_wTotalSec+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
pt+=2;
MBR_t->BPB_bMedia=*(gFormat+pt);
pt++;
MBR_t->BPB_wSecPerFAT=0;
for(i=0;i<2;i++)
MBR_t->BPB_wSecPerFAT+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
pt+=2;
MBR_t->BPB_wSecPerTrk=0;
for(i=0;i<2;i++)
MBR_t->BPB_wSecPerTrk+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
pt+=2;
MBR_t->BPB_wHeads=0;
for(i=0;i<2;i++)
MBR_t->BPB_wHeads+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
pt+=2;
MBR_t->BPB_dHiddSec=0;
for(i=0;i<4;i++)
MBR_t->BPB_dHiddSec+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
pt+=4;
MBR_t->BPB_dBigTotalSec=0;
for(i=0;i<4;i++)
MBR_t->BPB_dBigTotalSec+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
pt+=4;
MBR_t->bDrvNum=*(gFormat+pt);
pt++;
MBR_t->bReserved1=*(gFormat+pt);
pt++;
MBR_t->bBootSig=*(gFormat+pt);
pt++;
for(i=0;i<4;i++)
MBR_t->bVolID[i]=*(gFormat+pt+i);
pt+=4;
for(i=0;i<11;i++)
MBR_t->bVolLab[i]=*(gFormat+pt+i);
pt+=11;
for(i=0;i<8;i++)
MBR_t->FileSysType[i]=*(gFormat+pt+i);
pt+=8;
for(i=0;i<448;i++)
MBR_t->ExecutableCode[i]=*(gFormat+pt+i);
pt+=448;
//MBR_t->EndingFlag=0;
//for(i=0;i<2;i++,pt++)
MBR_t->EndingFlag=*(gFormat+pt)<<8;
MBR_t->EndingFlag+=(unsigned char)(*(gFormat+pt+1));
}
void write_MBR(DBR_tag * MBR_t,char *gFormat)
{
int pt=0,i=0;
for(i=0;i<3;i++)
*(gFormat+pt+i)=MBR_t->bJmpBoot[i];
pt+=3;
for(i=0;i<8;i++)
*(gFormat+pt+i)=MBR_t->bOEMName[i];
pt+=8;
for(i=0;i<2;i++)
*(gFormat+pt+i)=(MBR_t->BPB_wBytesPerSec>>(i*8))&(0x00ff);
pt+=2;
*(gFormat+pt)=MBR_t->BPB_bSecPerClus;
pt++;
for(i=0;i<2;i++)
*(gFormat+pt+i)=(MBR_t->BPB_wReservedSec>>(i*8))&(0x00ff);
pt+=2;
*(gFormat+pt)=MBR_t->BPB_bNumFATs;
pt++;
for(i=0;i<2;i++)
*(gFormat+pt+i)=(MBR_t->BPB_wRootEntry>>(i*8))&(0x00ff);
pt+=2;
for(i=0;i<2;i++)
*(gFormat+pt+i)=(MBR_t->BPB_wTotalSec>>(i*8))&(0x00ff);
pt+=2;
*(gFormat+pt)=MBR_t->BPB_bMedia;
pt++;
for(i=0;i<2;i++)
*(gFormat+pt+i)=(MBR_t->BPB_wSecPerFAT>>(i*8))&(0x00ff);
pt+=2;
for(i=0;i<2;i++)
*(gFormat+pt+i)=(MBR_t->BPB_wSecPerTrk>>(i*8))&(0x00ff);
pt+=2;
for(i=0;i<2;i++)
*(gFormat+pt+i)=(MBR_t->BPB_wHeads>>(i*8))&(0x00ff);
pt+=2;
for(i=0;i<4;i++)
*(gFormat+pt+i)=(MBR_t->BPB_dHiddSec>>(i*8))&(0x00ff);
pt+=4;
for(i=0;i<4;i++)
*(gFormat+pt+i)=(MBR_t->BPB_dBigTotalSec>>(i*8))&(0x00ff);
pt+=4;
*(gFormat+pt)=MBR_t->bDrvNum;
pt++;
*(gFormat+pt)=MBR_t->bReserved1;
pt++;
*(gFormat+pt)=MBR_t->bBootSig;
pt++;
for(i=0;i<4;i++)
*(gFormat+pt+i)=MBR_t->bVolID[i];
pt+=4;
for(i=0;i<11;i++)
*(gFormat+pt+i)=MBR_t->bVolLab[i];
pt+=11;
for(i=0;i<8;i++)
*(gFormat+pt+i)=MBR_t->FileSysType[i];
pt+=8;
for(i=0;i<448;i++)
*(gFormat+pt+i)=MBR_t->ExecutableCode[i];
pt+=448;
//for(i=0;i<2;i++,pt++)
*(gFormat+pt)=0x55;
*(gFormat+pt+1)=0xaa;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -