ما هو الترميز الذي توجده الأوتار الموجودة في مقطع Mach-O __data ، يستخدم قسم __cfstring؟
سؤال
أتساءل عن كيفية قراءة السلاسل بشكل صحيح من قسم محدد من ثنائي 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.
لا تنتمي إلى StackOverflow