类转储和CFObjects

时间:2011-03-26 20:32:27

标签: objective-c cocoa struct decompiling cfstring

类转储是否被CFObjects / structs混淆了?我在一个应用程序上使用了类转储,其中一个方法的参数是一个结构arg1,它是一个BInstantMessage:

struct BInstantMessage {
    void **_field1;
    struct CFString _field2;
    unsigned short *_field3;
    struct DTextStyle _field4;
    struct BUser *_field5;
    struct BChat *_field6;
};

struct CFString {
    void **_vptr$CFObject;
    struct __CFString *mCFRef;
    _Bool mIsMutable;
};

struct __CFString;

那么,如何从这个arg1中获取CFStringRef或NSString *?我猜这个类转储正在用CFString定义替换一些CFStringRef,但这只是猜测...... 我想要的是从arg1获得一个CFStringRef,这是一个BInstantMessage。

Thnaks!

1 个答案:

答案 0 :(得分:0)

应用程序正在使用C ++包装器来处理Core Foundation对象。 struct CFString中的BInstantMessage是此类型的对象。你想要(NSString *)(arg1._field2.mCFRef)

void **_vptr$CFObject字段是此处的主要提示 - 它表示虚拟超类CFObject的vtable - 与常见的C ++ m前缀命名约定相结合。