【问题标题】:What is the core Difference between Runtime Headers and just "Headers"?运行时标头与“标头”之间的核心区别是什么?
【发布时间】:2014-12-13 09:24:44
【问题描述】:
【问题讨论】:
标签:
ios
objective-c
header
cydia
【解决方案1】:
标头有 3 个主要来源:来自代码开发者、来自类转储和来自运行时标头转储工具。
Apple 或 SDK 开发人员将发布一个头文件,其中包含他们打算让其他开发人员使用的公共接口。它可能不包括他们不希望您看到的一些方法/变量声明。 Apple SDK 中的 UIView.h 将是他们隐藏某些信息的一个很好的例子。
仅仅因为它们没有在头文件中包含这些方法,并不意味着这些类的实例无法响应它们。这就是 class-dump 之类的工具的用武之地,它通过查看已编译的 Mach-O 文件来确定该类包含哪些方法/ivars,并据此生成标头。
使用 Objective-C 的运行时特性,可以在运行时添加和删除全新的类、方法和 ivars。从其他 SDK/目标文件加载的类别之类的东西也不会出现在原始类的类转储中。由于这些原因,运行时转储工具可以查看这些类的哪些实例在运行时实际可以响应。
每组标头都可用于确定类的预期用途和非预期用途,了解其中的差异可以帮助您更清楚地了解所进行的逆向工程。
【解决方案2】:
很难说有什么区别。它们都是使用运行时自省生成的标头集。第一个说它是公共和私有的标头。
每个人都明白,这两个链接都指向一组标题,可让您访问私有操作系统 API。使用这些会让你被应用商店拒绝。它们仅在开发供开发者个人使用的应用程序或越狱开发时真正有用。