Я немного борюсь с составным форматом документов.
Я сейчас работаю в C, но у меня проблемы с поиском сектора каталогов.
Я могу получить составной заголовок документа, который является тривиальным, и я знаю формулу для нахождения смещения файла с идентификатором сектора (secid + 1 << sec_size
), но всякий раз, когда я использую эту формулу для преобразования secid
в fileoffset
для каталога I получить случайные значения.
Может ли кто-нибудь помочь мне понять, как правильно разрешить смещения secid
и, возможно, также как разработать цепочки secid
из таблицы распределения секторов в составном документе?
Вот пример того, что я пробовал:
comp_doc_header* cdh((comp_doc_header*)buffer);
printf("cdoc header:%d\n", sizeof(cd_dir_entry));
if(cdh->rev_num == 0x003E)printf("rev match\n");
//check magic number
if(cdh->comp_doc_id[0] != (unsigned char)0xD0 ||
cdh->comp_doc_id[1] != (unsigned char)0xCF ||
cdh->comp_doc_id[2] != (unsigned char)0x11 ||
cdh->comp_doc_id[3] != (unsigned char)0xE0 ||
cdh->comp_doc_id[4] != (unsigned char)0xA1 ||
cdh->comp_doc_id[5] != (unsigned char)0xB1 ||
cdh->comp_doc_id[6] != (unsigned char)0x1A ||
cdh->comp_doc_id[7] != (unsigned char)0xE1)
return 0;
buffer += 512;
//here i try and get the first directory entry
cd_dir_entry* cde((cd_dir_entry*)&buffer[(cdh->first_sector_id + 1) << 512]);
<ч />
РЕДАКТИРОВАТЬ: (secid + 1) * 512
должно быть (secid + 1) * sec_size