首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析私有目标-C特定的Mach-O节

如何解析私有目标-C特定的Mach-O节
EN

Stack Overflow用户
提问于 2012-08-10 15:14:08
回答 1查看 1.7K关注 0票数 2

在Mach-O二进制文件的数据段中,有几个特定于目标C的部分(在Mach-O文件格式的第7页中提到)

引用PiOS纸

__objc_classlist部分包含了其实现存在于分析的二进制文件中的所有类的列表(即由开发人员实现的所有类或由静态链接器包含的类)。

另一方面,__objc_classref部分包含对应用程序使用的所有类的引用。这些类的实现不需要包含在二进制本身中,而是可以由运行时框架(相当于动态链接库)提供。

他们提到,这些结构的布局可以从目标C运行时头(它们是可用的这里)获得。

__objc_classref__objc_classlist部分的实际结构是什么?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-23 06:51:39

看看GETSECT宏在略有更新的Objective运行时实现版本中的定义。看起来是这样的:

代码语言:javascript
复制
#define GETSECT(name, type, sectname)                                   \
    type *name(const header_info *hi, size_t *outCount)  \
    {                                                                   \
        unsigned long byteCount = 0;                                    \
        type *data = (type *)                                           \
            getsectiondata(hi->mhdr, SEG_DATA, sectname, &byteCount);   \
        *outCount = byteCount / sizeof(type);                           \
        return data;                                                    \
    }

这告诉我们,每个部分都是一个type类型项的数组。

之后,它使用了几行来声明名为_getObjc2ClassRefs_getObjc2ClassList的函数,它们阅读了您感兴趣的两个部分:

代码语言:javascript
复制
GETSECT(_getObjc2ClassRefs,           class_t *,       "__objc_classrefs");
GETSECT(_getObjc2ClassList,           classref_t,       "__objc_classlist");

因此,__objc_classrefs包含class_t *s,__objc_classlist包含classref_ts,解释这些字段应该相对来说是不言自明的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11904570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档