2013-03-11 31 views
1

我下载class-dump用于获取有关的Mach-O文件的信息。创建一个示例应用程序的头文件类突降
,我认出了该工具创建一个奇怪的CDStructures.h离奇CDStructures.h今天

有很多的struct -objects定义,符合市场预期。但他们中的一些没有成员,像这样:

struct AlbumInfo; 
.... 
struct ArtistInfo; 
.... 

但其他struct -objects使用这些空物体是这样的:

struct RefPtr<sp::AlbumInfo> { 
    struct AlbumInfo *_p; 
}; 

是吗?还是错过了什么?我觉得很奇怪,他们是那么多没有成员的对象。
另一件事是,这namespace或任何sp没有宣布任何地方。

但我见过的最奇怪的是,尖括号内的元素,一方面类型(sp::GuiControl*)和另一方面值(64true)。

struct Array<sp::GuiControl*, sp::GuiControl* const&, 64, true> { 
    struct GuiControl **_field1; 
    unsigned int _field2; 
    unsigned int _field3; 
}; 

也许,你已经看到了这样的事情,可以帮助我。我不知道我应该从哪里开始。
这只是我的错,还是在Mach-O文件中缺少信息?

+3

那些可能是前向声明。结构的字段可能在另一个文件中。 – 2013-03-11 17:52:03

+0

我搜索了他们,但没有任何这些结构的声明。 – 2013-03-11 17:53:20

+0

你检查过所有的文件,而不只是头文件吗? – 2013-03-11 18:09:38

回答

1

class-dump只能告诉你为其信息是存在于由编译器生成的可执行文件的Objective-C的元数据结构。这通常包括任何Objective-C类以及它们作为成员包含的任何结构(Objective-C运行时需要知道其反射/动态访问工作的布局)。在struct AlbumInfostruct GuiControl的情况下,只有指针他们都存在,并且指针的大小始终是无论它指向相同的,所以没有必要列入指向的结构布局。

class-dump包括前声明,使代码在语法上是正确的,但它并没有产生实际的结构布局,因为它是不存在的二进制文件。

至于尖括号的语法,它只是C++模板实例。同样,模板声明并不存储在二进制文件中,而只存储在指定了所有参数的模板的具体实例中。

+0

因此没有机会获得'struct AlbumInfo'或'struct GuiControl'的成员列表? – 2013-03-12 12:57:08

+0

那么,*有*信息存在的可能性,但由于某种原因,类转储无法找到或解释它,但我真的怀疑它。如果这些结构的布局未在Objective-C类中使用,那么很可能编译器尚未生成必要的信息。您需要调查使用这些结构的方法来发现它们的布局。 – 2013-03-12 14:16:12