当前位置: 首页 > 编程日记 > 正文

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

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

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操作系统》

相关文章:

【数据结构】拓扑排序

如果一个有向图中没有包含简单的回路,这样的图为有向无环图。 图中的顶点代表事件(活动),图中的有向边说明了事件之间的先后关系。这种用顶点表示活动,用弧表示活动时间的优先关系的有向图称为顶点表示活动的网&#…

Java8自定义条件让集合分组

** 将一个指定类型对象的集合按照自定义的一个操作分组&#xff1b; 每组对应一个List、最终返回结果类型是:List<List<T>> param <T>*/static class GroupToList<T> implements Collector<T, List<List<T>>, List<List<T>&g…

ROS_Kinetic ubuntu 16.04

ROS_Kinetic系列学习(一)&#xff0c;在ubuntu 16.04安装ROS Kinetic。 http://wiki.ros.org/kinetic/Installation/Ubuntu 通过网页快速了解Linux&#xff08;Ubuntu&#xff09;和ROS机器人操作系统&#xff0c;请参考实验楼在线系统如下&#xff1a; 纯净定制版镜像已经…

android 获取手机GSM/CDMA信号信息,并获得基站信息

本文转自&#xff1a;http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/ 在Android中我们常用的轻松获取WIFI信号列表&#xff0c;那如何获取CDMA或者GSM的手机信号呢&#xff1f;系统提供了TelephonyManager类&#xff0c;此类非常丰富&#xff0c;基本你所…

【数据结构】关键路径

在有向图中&#xff0c;如果用顶点表示事件&#xff0c;弧表示活动&#xff0c;弧上的权值表示活动持续的时间&#xff0c;这样的活动称为边表示活动的网&#xff0c;简称AOE网&#xff08;Activity On Edge&#xff09;。通常可以用AOE网来估算工程的完成时间&#xff0c;他不…

呼伦湖国家级自然保护区管理局投放草料保野生黄羊过冬

图为保护区工作人员正在观测黄羊的生活轨迹并记录数据。 王艳清 摄 图为保护区工作人员正在观测黄羊的生活轨迹并记录数据。 王艳清 摄 中新网呼伦贝尔1月16日电 (记者 李爱平)中国北方正是最为寒冷的时节&#xff0c;呼伦湖国家级自然保护区管理局内的60只野生黄羊正在面临食草…

buildroot httpd php

/********************************************************************* buildroot httpd php* 说明&#xff1a;* 在buildroot中选择了php&#xff0c;但是在测试的时候发现总是出现下面这行* 错误&#xff0c;库是存在的&#xff0c;但是却没有放对…

VS快速注释多行 以及 取消

快速注释多行&#xff1a;Ctrl K 然后 Ctrl C 快速取消多行注释 &#xff1a;Ctrl K 然后 Ctrl U

前端的一些小的效果

1 . 移动端字体自适应大小&#xff08;暂时没用过&#xff0c;不过据说很有用也很好用&#xff09; body{font-family: "Microsoft YaHei";font-size: 0.14rem;color: #666;max-width: 640px;margin: auto;}media screen and (min-width: 360px) { html {font-s…

Java虚拟机规范阅读(二)IEEE754简介以及Java虚拟机中的浮点算法

什么是浮点数在计算机系统的发展过程中&#xff0c;曾经提出过多种方法表达实数。典型的比如相对于浮点数的定点数&#xff08;Fixed Point Number&#xff09;。在这种表达方式中&#xff0c;小数点固定的位于实数所有数字中间的某个位置。货币的表达就可以使用这种方式&#…

【ACM】杭电OJ 5055(Bob and math problem)

http://acm.hdu.edu.cn/showproblem.php?pid5055 注意几点&#xff1a; 1、全部都是偶数&#xff0c;输出-1 2、n-1个是0&#xff0c;第n个不论是奇数&#xff0c;还是偶数&#xff0c;输出-1 3、n1的情况 4、将所有数字从大到小排列&#xff0c;挑出最小的奇数放在最后…

每天工作4小时的程序员【转】

每个人都熟悉这种作息规律&#xff1a;早上9点去上班&#xff0c;坐在电脑前面&#xff0c;编一天的程序&#xff0c;下午5点下班回家。如今&#xff0c;非常感谢蒂莫西费里斯 (Timothy Ferriss)的《每周工作4小时》&#xff0c;我开始重新思考应该如何工作&#xff0c;如何让自…

ARKIT/ARCore对比分析(一)

ARKit简介 ARkit是什么&#xff1f; 苹果为什么发布ARkit&#xff1f;&#xff08;6月5日的苹果WWDC 2017全球开发者大会上&#xff0c;苹果发布了AR开发平台ARkit&#xff09; 1.概述&#xff1a;ARkit应用平台是苹果的首个 AR 产品。iOS 11引入了ARKit应用平台&#xff0c;…

每个程序员必看:如何在40岁后继续做软件开发?

导读: 这是一个 42 岁的开发者所写经验分享文章&#xff0e;并且列出一些他 18 年多身为软件开发者的经验谈&#xff0e;许多部分看完后都会希望自己当时就能够了解&#xff0c;所以很推荐不论是新手或是老手都要好好阅读这一篇文章。 故事很长&#xff0c;一切从 1997 年开始讲…

【ACM】杭电OJ 1009 (FatMouse' Trade)。

两个条件貌似缺一不可 不明白为什么不能是sum&#xff08;s[i].value*s[i].cat_food&#xff09;&#xff1b; #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std;const int maxn 1010;typedef …

Java图形化:布局方式

布局方式 FlowLayout:流布局 BorderLayout:边框布局 GridLayout:网格布局FlowLayout&#xff08;流布局&#xff09; 像Word打字&#xff0c;组件从左向右排列&#xff0c;一列排满后自动换下一行。组件默认居中对齐&#xff0c;可以设置左/右对齐。流布局会维持组件的原始大小…

ARKIT/ARCore对比分析(二)

ARKit(2) ARCore 和 ARKit平台特点比对 曾与一家最大的 IMU OEM 交谈过&#xff0c;为了节省成本&#xff0c;他们的智能机IMU 在工厂中只是在单一温度下进行标定。这意味着 IMU 硬件在某一指定的温度下&#xff0c;误差被调节到最低。但当手机发热的时候&#xff0c;IMU 就不…

【ACM】杭电OJ 1789(Doing Homework again)

http://acm.hdu.edu.cn/showproblem.php?pid1789 cmp函数&#xff1a; 先按扣分由多到少进行排序&#xff0c;然后如果遇到扣分一样的&#xff0c;则先做时间少的。 vis数组&#xff1a; 最要的事&#xff0c;放在它的截至日期那一天去做&#xff0c;然后&#xff0c;之后…

推荐使用的几款Java常用基础工具库

通用工具类(字符串、时间格式化、BeanUtils、IO)1. commons-lang3库1.1. org.apache.commons.lang3.StringUtils类日常代码中&#xff0c;我们经常和String字符串打交道&#xff0c;经常对字符串进行处理&#xff0c;稍微不注意的话&#xff0c;很容易出现类似NullPointerExcep…

ARKit 与 ARCore比对(三)

ARKit 和 ARCore剖析、结构、原理介绍 ARKit 和 ARCore 都是三部分&#xff1a;相机姿态估计&#xff0c; 环境感知&#xff08;平面估计&#xff09;及光源感知。 ARCore 的部分源码&#xff1a;https://github.com/google-ar/arcore-unity-sdk/tree/master/Assets/GoogleARCo…

前端开发之retina屏幕

像素 && ppi 首先先说一下pixel(picture element)&#xff0c;显示图像的最小单位&#xff0c;有多个带色彩的像素点组成的整体就是一张图像。然后再说一下ppi(pixel per inch)这个概念&#xff0c;其实就是在每英寸显示的像素数。 设备像素 && 逻辑像素 &…

【ACM】Uva 1152 (4 Values whose Sum is 0) 二分查找lower_bound() 和upper_bound()的使用

【问题描述】 The SUM problem can be formulated as follows: given four lists A, B, C, D of integer values, compute how many quadruplet (a, b, c, d) ∈ A B C D are such that a b c d 0. In the following, we assume that all lists have the same size n. …

广东“基因编辑婴儿事件”调查组:将对贺建奎依法依规严肃处理

雷锋网(公众号&#xff1a;雷锋网)消息&#xff0c;1 月 21 日&#xff0c;新华社报道了关于“基因编辑婴儿事件”的初步调查结果&#xff0c;该结果宣称&#xff0c;该事件是南方科技大学副教授为了追逐个人名利而进行的人类胚胎基因编辑活动&#xff1b;而在此过程中&#xf…

测试我的第一个随笔

# encodingutf-8## Python Version 3.5# 利用数学中的复数 求解 一元一次方程(从网上看来的)def solve(qx, var): qx qx.replace(, -() ) c eval(qx , {var: 1j}) return -c.real/c.imagres solve(2*x 4 8,x)print(res)转载于:https://www.cnblogs.com/imyjy/p/…

ubuntu16.04 下安装Opencv2.4.9

ubuntu16.04 下安装Opencv2.4.9 OpenCV的源码download from: https://sourceforge.net/projects/opencvlibrary/?sourcetyp_redirect[plain] view plaincopycd opencv-2.4.9 mkdir build sudo chmod -R 777 build cd build [plain] view plaincopycmake -D CMAKE_…

UVa 167(八皇后)、POJ2258 The Settlers of Catan——记两个简单回溯搜索

UVa 167 题意&#xff1a;八行八列的棋盘每行每列都要有一个皇后&#xff0c;每个对角线上最多放一个皇后&#xff0c;让你放八个&#xff0c;使摆放位置上的数字加起来最大。 参考&#xff1a;https://blog.csdn.net/xiaoxiede_wo/article/details/79973171 1 #include <io…

AR + ROS +UBUNTU16.04+ORB-SLAM2

ORB SLAM2 USB摄像头 实验环境ubuntu 16.04ros kinetic OPencv2.4.9 Step1&#xff1a; 配置环境变量 $ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/src 在’src’目录中可能没有任何软件包&#xff0c;只有一个CMakeLists.txt&#xff0c;依然可以编译它&#xff1a; …

Cross-validation

2019独角兽企业重金招聘Python工程师标准>>> 1: Introduction To Validation So far, weve been evaluating accuracy of trained models on the data the model was trained on. While this is an essential first step, this doesnt tell us much about how well …

【ACM】杭电OJ 1877 又一版A+B(进制转换)

注意&#xff1a;A和B都是0的情况 A和B为int也可以AC #include<cstdio> #include <iostream> using namespace std;const int maxn 10000;int a[maxn];int main() {long long A,B;int m,k;while(scanf("%d",&m)!EOF){if(m0) return 0;scanf("…

[POI2009]KAM-Pebbles BZOJ1115 [ 待填坑 ] 博弈

有N堆石子&#xff0c;除了第一堆外&#xff0c;每堆石子个数都不少于前一堆的石子个数。两人轮流操作每次操作可以从一堆石子中移走任意多石子&#xff0c;但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏。问先手是否必胜。 感谢MT大牛翻译. Sample OutputNIE…