| Разработка и ромхакинг > Ромхакинг и программирование |
| Структура данных на 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, от тебя уже одна тема по этому поводу есть. Зачем еще и сюда писать? |
| Навигация |
| Главная страница сообщений |
| Предыдущая страница |