由类转储创建的奇异的CDStructures.h
Bizarre CDStructures.h created by class-dump
今天我下载了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;
};
也许,你已经见过这样的东西,可以帮助我。我不知道该从哪里开始。
这是我的错还是马赫- o文件中缺少信息?
class-dump
只能显示由编译器生成的可执行的Objective-C元数据中存在信息的结构。这通常包括任何Objective-C类和它们作为成员包含的任何结构(Objective-C运行时需要知道它们的反射/动态访问工作的布局)。在struct AlbumInfo
或struct GuiControl
的情况下,只有指针指向它们,并且指针的大小总是相同的,无论它指向什么,因此不需要包括指向结构的布局。
class-dump
包含了前向声明,因此代码在语法上是正确的,但它没有生成实际的结构体布局,因为它不存在于二进制文件中。
至于尖括号语法,它只是c++模板实例化。同样,模板声明不存储在二进制文件中,而只存储在指定了所有参数的模板的具体实例中。
相关文章:
- 分段故障(堆芯转储)矢量
- Cppcheck生成xml转储文件
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 浮点异常(核心转储)#694457
- 分段错误(核心转储)但无法弄清楚
- 链接到libkcapi时没有核心转储
- 检测到堆栈粉碎:已终止 中止(核心已转储)
- 正在处理故障(堆芯转储)
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- 我不知道为什么这段代码会让核心被转储?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在基数排序中,我得到 munmap_chunk():无效指针和中止(核心转储).为什么?
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到 class4.exe.sta
- C++快速将 int 数组内容转储到文本文件中
- 合并排序:分段错误核心转储
- 由类转储创建的奇异的CDStructures.h