1

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

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

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

4

1 回答 1

1

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

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

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

于 2013-03-12T11:58:08.730 回答