2

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

Какие шаги вы предпримете для решения этой проблемы? Какие инструменты и т. Д.?

ответ

3

Хороший гекседиктор и используйте серое вещество для идентификации структур.

Если у вас есть подсказка, какой файл он есть, вы можете искать более специализированные инструменты.

Запуск команды «файл» unix/Linux также может быть хорошим (*) См. Комментарий Barry ниже о том, как это работает. Это может быть быстрая проверка для обычных типов файлов, таких как DBF, ZIP и т. Д., Скрытых с помощью другого расширения.

(*) Существуют сторонние сборки для окон, но они могут отставать в версиях. Если вы можете сделать это в недавнем дистрибутиве * nix, рекомендуется это сделать.

+0

Что делает команда «файл» точно? – kyndigs

+1

@kyndigs использует список описаний формата - обычно байтовые последовательности, с которых должны начинаться разные форматы файлов, - чтобы попытаться определить формат файла. Описание формата называется magic, и вы найдете их в/etc/magic или/usr/share/file/magic или аналогичном. –

2

Процесс сериализации просто перебирает все опубликованные свойства и передает их значение в текстовый файл. Если вы не знаете точные классы, которые были переданы в файл, вам будет очень сложно десериализовать файл. (если не невозможно)

+0

Предполагая, что это действительно сериализовано с использованием классов VCL. VCL (tbinarywriter) потоки IIRC содержат имена свойств и грубый тип. –

+0

Я декомпилировал исходный exe, с которым он был открыт, и нашел серию упакованных записей, которые находятся в файле, поэтому я имею общее представление о том, что находится в файле, это будет просто случай, когда он будет прав. Я сделал аналогичную работу с изображениями libs, но у них есть визуальный результат, который сделал его легким и простой растровой структурой для каждого изображения. – kyndigs

+0

Если вы определили приложение/формат - возможно, у кого-то уже есть то, что вам нужно? –

1

Хороший редактор шестерков - это первый. Если файл читается без буферизации (например, читать напрямую из TFileStream), вы можете получить некоторую информацию при использовании ProcMon из SysInternals; Вы можете точно видеть, какие данные считываются в каких кусках, и тем самым быстрее определять границы границ между уже определенными структурами.

+0

Хм, это полностью не буферировано? Если есть некоторая буферизация, либо в Delhpi, либо в слое Windows ниже, где используются обработчики procmon, вы можете видеть только фрагменты сектора. –

+0

@Marco: Буферы Windows в ядре и то, что вы видите, это вызов CreateFile, ReadFile, WriteFile IoCtrl и т. Д. И возвращаемое. –

Смежные вопросы