Какую кодировку используют строки, найденные в сегменте Mach-O __DATA, разделе __cfstring?

Мне интересно, как правильно читать строки из определенного раздела двоичного файла Mach-O. (Это двоичный файл для iOS.)

Меня интересуют строки, найденные в сегменте __DATA, разделе __cfstring. Эти разделы, по-видимому, содержат массивы простых структур:

NSConstantString
{
    Class class;
    const char *string;
    int length;
}

Вопрос сводится к следующему: как вы определяете кодировку string?


person Dave Peck    schedule 01.12.2010    source источник


Ответы (1)


Это описано в исходном коде CFString, доступном здесь. Он либо в ASCII, либо в UTF16 (в порядке байтов процессора). Также см. исходный код clang, доступный здесь. Найдите GenerateConstantString. Константные строки в конечном итоге генерируются этим фрагментом кода, ищите GetAddrOfConstantCFString. В исходном коде сказано, что константа CFString имеет формат

  struct __builtin_CFString {
     const int *isa; // point to __CFConstantStringClassReference
     int flags;
     const char *str;
     long length;
 };

(по крайней мере, в OS X, я не уверен в iOS.) flags говорит вам, является ли это ASCII или UTF16.

person Yuji    schedule 01.12.2010