0 引言
在我的前一篇博客讲到了字典树的实现,这里最后讲到字典树的数据最后会写入到/dev/__properties__/property_info文件中去。接下来就是读取这个文件并映射到内存中,并将其中的SeLinux上下文信息生成一系列的ContextNode节点。整个流程如下图所示:
在源码PropertyInit()中,完成这一功能的函数是__system_property_area_init()。
1 解析属性上下文文件
要想解析属性上下文文件,首先得将数据读取进来。Android源码中/dev/__properties__/property_info文件中的数据读取并初始化到ContextsSerialized对象中。
将读取的文件映射到内存中,由PropertyInfoArea对象对它进行管理(反序列化数据)
2 生成上下文节点(ContextNode)
利用PropertyInfoArea对象可以很好地获取到SeLinux上下文数据,将这些数据保存到一系列的ContextNode节点中去。这一步同样使用了mmap内存映射,专门开辟了一块匿名内存来存储ContextNode节点。
生成一系列的ContextNode节点后,调用它们内部的Open函数,可以生成一系列的属性文件(以它们的context命名)。
3 总结
得到的属性文件如下图所示:
这是我上一篇文章举例的两个SeLinux属性。