Данные часто хранятся в программных двоичных файлах, для которых мало или нет документации. Типичным примером в нашей области являются данные, которые поступают с прибора, но я подозреваю, что проблема общая. Какие существуют методы для понимания и интерпретации данных?
Чтобы установить некоторые границы. Файлы не зашифрованы и DRM отсутствует. Тип и формат файла зависят от автора программы (т. Е. Это не «стандартный файл», такой как * .tar, личность которого была утеряна). Там (вероятно) нет преднамеренного запутывания, но могут быть некоторые любительские усилия по экономии места. Мы можем предположить, что у нас есть общие знания о том, что представляют собой данные, и мы можем распознать некоторые, но, вероятно, не все поля и массивы.
Предположим, что большая часть данных является числовой, со скалярами и массивами (возможно, 1- и 2-мерными, а иногда нерегулярными или треугольными). Также будут некоторые строки символов, вероятно, имена людей, сайты, даты и, возможно, некоторые ключевые слова. В программе будет код, который читает двоичный файл, но у нас нет доступа к источнику или ассемблеру. Например, он может быть написан программой VAX Fortran или ранним Unix или Windows как объекты OLE. Числа могут быть с прямым или прямым порядком байтов (что неизвестно в начале), но, вероятно, они согласуются. Мы
могут иметь разные версии на разных машинах (например, Cray).
Можно предположить, что у нас достаточно большой набор файлов, скажем, несколько сотен.
Мы можем предположить два сценария:
- Мы можем перезапустить программу с разными входами, чтобы мы могли проводить эксперименты.
- Мы не можем перезапустить программу - у нас есть фиксированный набор документов. Это имеет небольшое сходство с расшифровкой исторических документов на неизвестном языке (например, Линейный B).
Частичное решение может быть приемлемым, т. Е. Могут существовать некоторые области, которые ни один живой человек сейчас не понимает, но большинство других интерпретируются.
Меня интересуют только подходы с открытым исходным кодом.
ОБНОВЛЕНИЕ Есть связанный вопрос SO ( Как выполнить обратный инжиниринг форматов двоичных файлов для целей совместимости ), но акцент несколько иной.
ОБНОВЛЕНИЕ Умное предложение от @brianegge по адресу (1). Используйте truss
(или, возможно, strace
в Linux), чтобы сбросить все вызовы write () и аналогичные вызовы в программе. Это должно позволить как минимум сбор записей, записанных на диск.