iOS 系统分析(一) 阅读内核准备知识

原文出自【听云技术博客】:http://blog.tingyun.com/web/article/detail/1134

0x01 iOS体系架构

1.1 iOS 系统的整体体系架构

  • 用户体验( The User Experience layer ):SpringBoard 同时支持 Spotlight。
  • 应用软件开发框架(The Application Frameworks layer):Cocoa ( Cocoa Touch )。
  • 核心开发框架(The Core Frameworks):图形和多媒体一类软件的开发环境,包括 核心框架,Open GL和QuickTime等。
  • Darwin:系统内核核心:包括 内核 和Unix Shell 环境。

1.2 Darwin体系

1.3 XNU概述

  • Darwin是一种类似unix的操作系统,他的核心是XNU。
  • XNU是一种混合式内核。结合了mach与BSD两种内核。
  • Mach 是微内核实现。
  • BSD 实现在Mach的上层,这一层提供的API 支持了POSIX标准模型。在XNU中主要实现了一些高级的API与模块。

1.3.1 Mach 微内核简介

  • 在XNU中主要完成以下几个功能:
  • 进程与线程的抽象
  • 虚拟内存管理
  • 任务调度
  • 进程间通信

1.3.2 BSD 内核简介 

  • BSD 实现在Mach的上层,这一层提供的API 支持了POSIX标准模型。在XNU中主要实现了一些高级的API与模块。
  • UNIX 进程模型;
  • POSIX 线程模型即pthread,以及相关的同步功能;
  • UNIX的用户与组管理;
  • 网络协议栈(BSD Socket API),符合POSIX 模型;
  • 文件系统/设备系统;

1.3.3 libKern

  • 实现了一个C+ +的子集(以库的形式为支持C+ +提供了运行时),为I/O kit 提供基础设施;

1.3.4 I/O kit 

  • I/O kit 是XNU 不同于其他操作系统的设备驱动框架。IOKit是一个面向对象的驱动模型框架,它是早期DriverKit的一个翻版,Driver Kit是使用Objective-C写的,而IOKit是一个C+ +的驱动架构,它在DriverKit的基础上做了很大的改进,比如IOKit可以写在用户空间跑的驱动(虽然大多仍是跑在内核空间上的),因而驱动挂了而系统不会挂。另外IOKit考虑到了计算机发展的趋势,所以在电源管理、即插即用、动态加载上做得更好。

0x02 iOS安全机制

2.1 代码签名

在iOS开发者使用的机器上应该已经有一个证书,一个公钥,以及一个私钥。这些事代码签名机制的核心。像SSL一样,代码签名也依赖于采用X.509 标准的公开密钥加密体系。无论是用户还是开发者都不能改变应用开启策略,你必须有一个开发者帐号或者应用发布证书才能让应用运行在 iOS 系统上。

2.2(强制访问控制(Mandatory Access Control)

iOS的entitlement 机制的基础。简称MAC,用于将系统中的信息分密级和类进行管理,以保证每个用户只能访问那些被标明可以由他访问的信息的一种访问约束机制。通俗的说,在MAC下,用户与文件都被标记了固定的安全属性(如安全级别,访问权限等),在每次访问发生时,系统检测安全属性以便确定一个用户是否有权访问该文件)。

2.3 沙盒机制(sandbox)

沙盒是一种安全机制,为运行中的程序提供隔离环境。沙盒在启动的时候可以设置运行的程序是否可以访问网络、文件、目录等。

参考 《深入解析Mac OS X & iOS操作系统》

时间: 2024-09-20 07:36:17

iOS 系统分析(一) 阅读内核准备知识的相关文章

PaperWeekly 第十九期 --- 新文解读(情感分析、机器阅读理解、知识图谱、文本分类)

引 本期的PaperWeekly一共分享四篇最近arXiv上发布的高质量paper,包括:情感分析.机器阅读理解.知识图谱.文本分类.人工智能及其相关研究日新月异,本文将带着大家了解一下以上四个研究方向都有哪些最新进展.四篇paper分别是: 1.Linguistically Regularized LSTMs for Sentiment Classification, 2016.11 2.End-to-End Answer Chunk Extraction and Ranking for Re

非常好!!!Linux源代码阅读——内核引导【转】

Linux源代码阅读--内核引导 转自:http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html 目录 Linux 引导过程综述 BIOS POST 自举过程 Boot loader 主引导扇区结构 GRUB stage1 GRUB stage2 内核初始化:体系结构相关部分 内核映像结构 header.S 初始化与保护模式 自解压内核 startup_32 内核初始化:体系结构无关部分 核心数据结构初始化 设备初始化 1 Lin

iOS系统分析(二)Mach-O二进制文件解析

原文出自[听云技术博客]:http://blog.tingyun.com/web/article/detail/1341 0x01  Mach-O格式简单介绍 Mach-O文件格式是 OS X 与 iOS 系统上的可执行文件格式,类似于windows的 PE 文件 与 Linux(其他 Unix like)的 ELF 文件,如果不彻底搞清楚Mach-O的格式与相关内容,那么深入研究 xnu 内核就无从谈起. Mach-O文件的格式如下图所示: 有如下几个部分组成: 1. Header:保存了Ma

IOS之UIWebView的使用(基本知识)_IOS

刚接触IOS开发1年多,现在对于混合式移动端开发越来越流行,因为开发成本上.速度上都比传统的APP开发要好,混合式开发是传统模式与PC网页端相结合的模式.那么提到了 APP的混合模式开发,在Android开发中有WebView作为混合模式开发的桥梁,当然在IOS中也同样有一个 UIWebView 组件来作为混合模式开发的桥梁,那么下面就对UIWebView的一些基本知识详解一下. 一.UIWebView的基础使用 1.创建UIWebView: CGRect bouds = [[UIScreen

PHP7内核基础知识之变量类型

前言 下面我们大概了解下PHP7的变量类型都有哪些,是如何存储变量的. zval结构定义 PHP7中是使用zval结构存储变量信息的.zval结构的定义在./Zend/zend_types.h文件中定义. struct _zval_struct { zend_value value; /* value */ union { struct { ZEND_ENDIAN_LOHI_4( zend_uchar type, /* active type */ zend_uchar type_flags,

第一行代码阅读笔记---基本知识

在res中,我们会看到很多目录,分别如下: drawable-hdpi drawable-ldpi drawable-mdpi drawable-xxhdpi layout menu values values-sw600dp values-sw720dp-land values-v11 values-v14 其实很简单,以上所有的目录中,drawable开头的文件夹是用来存放图片的,以value开头是用来存放字符串的,layout是用来存放布局文件的 menu文件夹是用来放菜单文件的. 很多情

《iOS 9应用开发入门经典(第7版)》——第2章,第2.1节使用Xcode

第2章 Xcode和iOS模拟器简介iOS 9应用开发入门经典(第7版) 本章将介绍: 如何在Xcode中新建项目: 代码编辑和导航功能: 在什么地方给项目添加类和资源: 如何修改项目属性: 针对iOS设备和iOS模拟器编译应用程序: 如何解读错误消息: iOS模拟器的功能和局限性: 在iOS模拟器中添加新设备. 您将在两个应用程序中完成主要的开发工作:Xcode和iOS模拟器,它们提供了设计.编写.测试iPhone和iPad应用程序所需的所有工具.另外,不同于其他平台,它们是完全免费的. 本章

十天学Linux内核之第十天---总结篇(kconfig和Makefile & 讲不出再见)

原文:十天学Linux内核之第十天---总结篇(kconfig和Makefile & 讲不出再见) 非常开心能够和大家一起分享这些,让我受益匪浅,感激之情也溢于言表,,code monkey的话少,没办法煽情了,,,,,,,冬天的风,吹得伤怀,倒叙往事,褪成空白~学校的人越来越少了,就像那年我们小年之后再回家的场景一样,到处荒芜,然而我们的激情却不褪去,依然狂躁在实验室凌晨两点半的星空里,也许今天又会是这样的一年,不一样的是身边的人变成学弟学妹了,而我们几个大三老家伙依然在,为自己喜欢的事情,为

Linux内核里的数据结构——位数组

Linux 内核中的位数组和位操作 除了不同的基于链式和树的数据结构以外,Linux 内核也为位数组(或称为位图(bitmap))提供了 API.位数组在 Linux 内核里被广泛使用,并且在以下的源代码文件中包含了与这样的结构搭配使用的通用 API: lib/bitmap.c include/linux/bitmap.h 除了这两个文件之外,还有体系结构特定的头文件,它们为特定的体系结构提供优化的位操作.我们将探讨 x86_64 体系结构,因此在我们的例子里,它会是 arch/x86/incl