奇怪的CDStructures.h由class-dump创建

时间:2013-03-11 17:50:36

标签: c++ objective-c class assembly struct

今天我下载了class-dump以获取有关Mach-O文件的信息 在 class-dump 创建了示例应用程序的头文件后,我发现了该工具创建的一个奇怪的CDStructures.h

正如预期的那样,struct - 对象有很多定义。但其中一些人没有成员,如下:

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

但是其他struct - 对象使用这样的空对象:

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文件中缺少信息?

1 个答案:

答案 0 :(得分:1)

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

class-dump包含了前向声明,因此代码在语法上是正确的,但它没有生成实际的struct布局,因为它不存在于二进制文件中。

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