2010-12-01 2 views
1

Mach-O 바이너리의 특정 섹션에서 문자열을 올바르게 읽는 방법이 궁금합니다. (iOS 용 이진 파일입니다.)Mach-O __DATA 세그먼트에있는 문자열은 __cfstring 섹션에서 어떤 인코딩을 사용합니까?

__DATA 세그먼트 __cfstring 섹션에있는 문자열에 대해 궁금합니다. 이 섹션은 간단한 구조의 배열을 포함하는 표시 : 어떻게 당신이 string의 인코딩을 결정합니까 :

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

질문에 온다?

답변

3

CFString의 소스에 설명되어 있습니다. here. ASCII 또는 UTF16 (프로세서 엔디안 형식)입니다. clang 소스 코드 (here)도 참조하십시오. GenerateConstantString을 찾으십시오. 상수 문자열은 결국 this piece of code에 의해 생성되고 GetAddrOfConstantCFString을 찾습니다. 소스 코드는 일정 CFString의 형식

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

(OS X에 적어도, 나는 아이폰 OS에 대해 확실하지 않다.)는 ASCII 또는 UTF16가 있는지 여부 flags 당신을 알려줍니다이다라고 말한다.

+0

매우 유용한 답변입니다. 감사! –

관련 문제