0

我是 C 语言的新手,正在尝试创建一个取证工具。到目前为止,我有这个。它读取一个 dd 文件,该文件是 fat16 MBR 的转储。我能够正确读取某些字节,但不能正确读取某些字节。

我需要帮助的是 SizeOfFat 变量需要以小端方式读取字节 0x16 和 0x17 的值。我如何让它读取 FB00 然后将其转换为 00FB 然后打印值?

char buf[64];
int startFat16 = part_entry[0].start_sect,sectorSize = 512,dirEntrySize=32;
fseek(fp, startFat16*512, SEEK_SET);
fread(buf, 1, 64, fp);

int rootDir = *(int*)(buf+0x11);
int sectorPerCluster = *(int*)(buf+0x0D);
int sizeOfFat = *(int*)(buf+0x16);
int fatCopies = *(int*)(buf+0x10);  
printf("\n Phase 2 \n no of sectors per cluster : %d \n",(unsigned char)sectorPerCluster);
printf("size of fat : %d \n",(unsigned char)sizeOfFat);
printf("no of Fat copies : %d \n",(unsigned char)fatCopies);
printf("maximum number of root directories : %d \n",(unsigned char)rootDir);

我在这里使用的十六进制值是 -

EB 3C 90 4D 53 44 4F 53 35 2E 30 00 02 08 02 00 
02 00 02 00 00 F8 FB 00 3F 00 FF 00 3F 00 00 00
E1 D7 07 00 80 00 29 CD 31 52 F4 4E 4F 20 4E 41
4

1 回答 1

1

使用int,您只能保证它可以保存 32 位有符号整数。使用您的代码,您可以读取sizeof(int)每个变量的字节,即使它们的大小不同。大多数系统都有uint16_t, uint8_t,uint32_t类型。将它们用于固定宽度的数据。另请注意,它们是未签名的。您不希望每个集群都有负扇区,对吗?

于 2018-03-29T21:06:45.457 回答