Помогите мне понять этот двоичный формат файла - PullRequest
5 голосов
/ 23 декабря 2010

Я пытаюсь написать небольшую утилиту для создания двоичного файла, который будет имитировать файл, созданный другим закрытым приложением. Я использовал шестнадцатеричные редакторы, чтобы расшифровать формат, потому что я застрял, пытаясь понять, что такое формат / кодировка, чтобы я мог создать его с помощью C ++ или C #.

Файл начинается с первых четырех байтов: 01 00, за которыми следует FF FE. Насколько я понимаю, файл начинается с SOH, за которым следует метка порядка байтов для little-endian. После этих четырех байтов программа пишет BSTR для каждого из строковых полей из графического интерфейса приложения.

Используя C #, я создал файл Unicode, который начинается с FF FE, но я не уверен, как сначала вставить символ SOH.

Я был бы всегда благодарен, если бы кто-то мог предложить понимание формата или кодировки файла и почему файл начинается с символа SOH.

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 23 декабря 2010

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

Правовые вопросы Помимо этого, я бы посоветовал вам взглянуть на некоторые из следующих ресурсов, в которых рассказывается о подходах к такому начинанию:

3 голосов
/ 23 декабря 2010

Если у вас просто проблемы с записью первых четырех байтов, это сделает это за вас.

using (var stream = new FileStream("myfile.bin", FileMode.Create))
{
     using (var binaryWriter = new BinaryWriter(stream))
     {
         binaryWriter.Write((byte)1);
         binaryWriter.Write((byte)0);
         binaryWriter.Write((byte)0xFF);
         binaryWriter.Write((byte)0xFE);
         binaryWriter.Write(Encoding.Unicode.GetBytes("string"));
     }
}

Будет выведен следующий файл

01 00 FF FE 73 00 74 00 72 00 69 00 6e 00 67 00  ....s.t.r.i.n.g.

Редактировать: Добавлено предложение Марка Х для записи строки.

...