今天我下载了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*
),另一方面是值64
,true
)。
struct Array<sp::GuiControl*, sp::GuiControl* const&, 64, true> {
struct GuiControl **_field1;
unsigned int _field2;
unsigned int _field3;
};
也许,你已经看过这样的东西,可以帮助我。我不知道应该从哪里开始。
这只是我的错还是在Mach-O文件中缺少信息?
答案 0 :(得分:1)
class-dump
只能向您展示编译器生成的可执行文件的Objective-C元数据中存在信息的结构。这通常包括任何Objective-C类以及它们作为成员包含的任何结构(Objective-C运行时需要知道它们的布局以便反射/动态访问工作)。在struct AlbumInfo
或struct GuiControl
的情况下,只有指针存在,并且指针的大小始终相同,无论它指向什么,所以有不需要包含指向结构的布局。
class-dump
包含了前向声明,因此代码在语法上是正确的,但它没有生成实际的struct布局,因为它不存在于二进制文件中。
对于尖括号语法,它只是C ++模板实例化。同样,模板声明不存储在二进制文件中,而只存储在指定了所有参数的模板的具体实例中。