Разработка и ромхакинг > Ромхакинг и программирование
Структура данных на CD дисках
<< < (2/2)
MetalliC:

--- Цитата: paul_met ---Ну есть же размер сектора 2352 и разные режимы (Mode 1/2). Вообще, я пытаюсь найти файл в образе (iso/bin), если известно его имя и папка, в которой он лежит.
--- Конец цитаты ---

еще раз повторюсь, размер данных в дата-треке всегда одинаковый - 2048.
но физически каждый сектор CD (или GD) всегда содержит 2448 байт информации. в случае дорожки с данными там 2048байт собсно данных и 400 всякой фигни служебной инфы. что именно из тех 400 байт решили сохранить "для аутентичности" в образе, а что выкинуть зависит от формата образа, и настроек программы которой он был создан.
в случае на пример CUE-образов он указывается в теге "TRACK xx" -  MODE1/2352 MODE1/2048 итп
paul_met:

--- Цитата: Dyons ---2352
--- Конец цитаты ---

С чего вдруг так однозначно? Вот образ BIN/CUE в Mode1/2048:

Я удалю CUE и в моём BIN'e резко станет 2352 байт на сектор? Это же ерунда.

--- Цитата: MetalliC ---еще раз повторюсь, размер данных в дата-треке всегда одинаковый - 2048.
но физически каждый сектор CD (или GD) всегда содержит 2448 байт информации. в случае дорожки с данными там 2048 байт собсно данных и 400 всякой фигни служебной инфы. что именно из тех 400 байт решили сохранить "для аутентичности" в образе, а что выкинуть зависит от формата образа, и настроек программы которой он был создан.
--- Конец цитаты ---
Ладно. Тогда наглядный пример - как определить адрес начала данных файла, например, "BAM.SEQ" в образе (картинка выше)? На LBA не смотри, его программа посчитала. У тебя его типа нет.
MetalliC:

--- Цитата: paul_met ---Естественно. А если его нет? Как определить какой размер сектора у bin'а?
--- Конец цитаты ---

если на руках имеется только бинарник неизвестного происхождения, то да, только так и делать - искать сигнатуру CD001 и по офсету где она нашлась попытаться рассчитать размер и тип сектора. что может быть не просто в случае образов mixed mode CD в binary, или CD-XA, у которых в бинарнике перед собсно данными может быть кучка треков аудио.

Добавлено позже:

--- Цитата: paul_met ---Ладно. Тогда наглядный пример - как определить адрес начала данных файла, например, "BAM.SEQ" в образе (картинка выше)? На LBA не смотри, его программа посчитала. У тебя его типа нет.
--- Конец цитаты ---

в сетиж должна быть кучка туториалов на эту тему, и исходников.
в общем случае - нужно сделать модуль парсера-фильтра различных типов образов, с функциями "открыть образ", "считать сектор по LBA/MSF" и "получить TOC" (чтоб из него узнать LBA начала трека(ов) с данными). и дальше уже модуль парсера файловой системы.

Добавлено позже:

--- Цитата: paul_met ---А если его нет? Как определить какой размер сектора у bin'а?
--- Конец цитаты ---

размер сектора не "у bin'а", а у дорожек в этом бине, и у разных он может быть разный.
paul_met:

--- Цитата: MetalliC ---если на руках имеется только бинарник неизвестного происхождения, то да, только так и делать - искать сигнатуру CD001 и по офсету где она нашлась попытаться рассчитать размер и тип сектора. что может быть не просто в случае образов mixed mode CD в binary, или CD-XA, у которых в бинарнике перед собсно данными может быть кучка треков аудио.

--- Конец цитаты ---

Да вот так и делаю пока что. Пока единственная проблемка, если вдруг в образе попадутся одинаковые файлы в одинаковых подпапках. Пока не придумал как при таком раскладе поступать.


--- Цитата: MetalliC ---в сетиж должна быть кучка туториалов на эту тему, и исходников.
--- Конец цитаты ---

Вот и создал тему, ибо мало чего толкового попалось на глаза.


--- Цитата: MetalliC ---размер сектора не "у bin'а", а у дорожек в этом бине, и у разных он может быть разный.
--- Конец цитаты ---

Я имел в виду конечно data трек. Аудио дорожки не интересуют.
MetalliC:

--- Цитата: paul_met ---ибо мало чего толкового попалось на глаза
--- Конец цитаты ---

можешь это глянуть
http://sourceforge.net/p/cdemu/code/ci/master/tree/
в libmirage/images/
Yoti:

--- Цитата: paul_met от 10 Декабрь 2015, 21:31:26 ---Пока единственная проблемка, если вдруг в образе попадутся одинаковые файлы в одинаковых подпапках.

--- Конец цитаты ---
Это как? =)
MetalliC:
возможно имелся в виду поиск через Path Table (общую таблицу всех файлов имеющихся на диске), а не через чтение каждого каталога и поиск в них нужного файла
paul_met:

--- Цитата: Yoti ---Это как?
--- Конец цитаты ---

Допустим на диске есть два каталога - "Х001" и "Х002". В каждом из них вполне может быть подкаталог "Х003" с файлом "FILE.DAT".
Yoti:
paul_met,
итоговый путь до файла будет отличаться всё равно =) В любом случае, мой вопрос снят.
paul_met:
В общем, с размером секторов 2048 разобрался. А вот с 2352 есть проблема. Пересчёт EDC/ECC необходим? И если не пересчитывать, то как это повлияет на работоспособность образа? Что-то мне подсказывает, что никак. Наверное, разве что при записи на болванку. Или я не прав?
DrMefistO:
paul_met, когда-то HoRRoR выручил. И я тебя выручу)
https://github.com/lab313ru/tim2view/blob/master/ecc.pas
https://github.com/lab313ru/tim2view/blob/master/edc.pas


--- Код: ---function bin2bcd(P: Integer): byte;
begin
  Result := ((P div 10) shl 4) or (P mod 10);
end;

procedure BuildAdress(LBA: Integer; var Dest);
var
  P: PByte;
begin
  Inc(LBA, 75 * 2); // 2 seconds
  P := @Dest;
  P^ := bin2bcd(LBA div (60 * 75));
  Inc(P);
  P^ := bin2bcd((LBA div 75) mod 60);
  Inc(P);
  P^ := bin2bcd(LBA mod 75);
  Inc(P);
  P^ := 2;
end;
--- Конец кода ---


--- Код: ---ecc := build_edc(@(Sector.dwSubHeader[0]), 8 + 2048);
Move(ecc, Sector.dwECC, 4);
encode_L2_P(@(Sector.dwAddress[0]));
encode_L2_Q(@(Sector.dwAddress[0]));
BuildAdress(SectorIdx, Sector.dwAddress[0]);
--- Конец кода ---
Оно же тут: https://github.com/lab313ru/tim2view/blob/master/ucdimage.pas
paul_met:
DrMefistO, Эт, хорошо, благодарю. Посмотрим на привычный глазу синтаксис.
sannoki:
Ребят, может кто-то помочь с вытаскиванием пары моделей из образа диска? Всю документацию что я нашел скину.
DrMefistO:
sannoki, от тебя уже одна тема по этому поводу есть. Зачем еще и сюда писать?
Навигация
Главная страница сообщений
Предыдущая страница

Перейти к полной версии