ما هو الترميز الذي توجده الأوتار الموجودة في مقطع Mach-O __data ، يستخدم قسم __cfstring؟

StackOverflow https://stackoverflow.com/questions/4320458

سؤال

أتساءل عن كيفية قراءة السلاسل بشكل صحيح من قسم محدد من ثنائي Mach-O. (هذا ثنائي لنظام التشغيل iOS.)

أنا فضولي بشأن الأوتار الموجودة في __DATA مقطع، __cfstring الجزء. يبدو أن هذه الأقسام تحتوي على صفائف من الهياكل البسيطة:

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

يأتي السؤال إلى: كيف تقرر ترميز string?

هل كانت مفيدة؟

المحلول

تم وصفه في مصدر CFString متوفرة هنا. إنه إما في ASCII أو UTF16 (في المعالج endian-ness.) انظر أيضًا الكود المصدري لـ 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top