| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 使用PongoOS读取苹果ARM64 CPU功能支持寄存器 -> 正文阅读 |
|
[嵌入式]使用PongoOS读取苹果ARM64 CPU功能支持寄存器 |
前言 苹果自A6开始采用定制CPU核心,A7是全球第一款使用64位ARM的处理器。苹果CPU性能一直领先高通,必有一定的原因。通过读取ARM64 ID registers,或许能侧面揭晓一些答案。 PongoOS 自2019年checkm8漏洞公开以来,很快有大神们利用该漏洞制作了checkra1n越狱工具,为了方便地支持A7-A11多个硬件平台,多个iOS版本,checkra1n实现了一个Preboot environment,名为PongoOS,一个简易的操作系统。 checkra1n运行时利用checkm8将PongoOS注入iBoot,PongoOS通过内存Hook劫持iBoot,利用iBoot初始化平台,并在iBoot执行末尾启动自身,Pongo启动后加载KPF(Kernel Patch Finder)内核模块,KPF会patch掉内存中的iOS内核。 PongoOS目前已经开源,可以当作苹果硬件的实验环境使用。 编译启动PongoOS 在修改PongoOS之前,需要能够编译PongoOS,能够使用checkra1n启动iPhone。 PongoOS源码: https://github.com/checkra1n/pongoOS 支持macOS和Linux编译,根据官方readme,macOS下编译会简单一些:
先跑一遍make all,build下应该生成Pongo.bin,安装checkra1n后可通过以下命令启动:
接下来
会生成pongoterm工具,通过它就可以通过USB和iPhone上的PongoOS shell交互了。 一切准备就绪以后,可以修改Pongo源码,在pongo shell里添加读取ARM64寄存器的命令了。 ? 读取ARM64功能支持寄存器 打开 src/shell/main.c, 在shell_main函数以前加入读寄存器的命令:
然后在shell_main函数里注册刚添加的命令:
保存main.c,再次make all 生成Pongo.bin,再次通过checkra1n命令启动。 结果 在PongoOS shell中执行我们新添加的命令,即可读取苹果CPU的支持状态了。 我在A7(iPhone 5S)和A10(iPhone 7)上测试了读取: A7:
A10:
其中A7兼容Armv8.0-A,A10?Armv8.1-A。(真的完全兼容吗?) 通过上面的读取结果,可以看到: 1.苹果的ARM64处理器A7开始就不支持EL2(虚拟化),最近的M1/A14X因为要在mac上用才开始支持(且仅支持VHE模式,因为macOS只用这个模式) 2.苹果不使用ARM TrustZone实现加密敏感的操作,而是通过一个独立的SEP实现。但是在A7-A9上,为了实现KPP(Kernel Patch Protection),苹果使用了EL3。 而自A10开始,苹果使用了更加可靠的KTRR及其演进版本APRR代替KPP,于是苹果在A10里立刻砍掉了EL3支持。 3.A7和A10都使用了36bits物理地址。(已经完全够用了) 4.在A7中部分支持的大端模式已经在A10彻底砍掉。 5.因为不用EL3(TrustZone),A10没有SNSMem安全内存标识。 6.A7中的16bits ASID在A10变成了8bits(也够用了) 7.A10中砍掉了4KB内存页表支持,添加了16KB页表支持 这是iPhone7上很难运行安卓,(目前)不能运行Win10的原因之一。有很多人讨论4KB和16KB的优劣,苹果应该是测试发现16KB在iPhone场景效率更高一些。 8.A10的结果可以看到,其中有明显违反ARM规范的地方。事实上1中仅支持VHE也是违反ARM specs的。 9.A7开始就不支持32bit EL1(仅支持64位操作系统) 综合来看,苹果因为掌握App Store的控制权,很容易要求开发者按照相应的规范适配,更不用考虑运行macOS/iOS体系以外的软件,因此也就没有安卓/Windows那么重的历史包袱,想要放弃一些CPU功能很容易(例如32位支持)。 因此苹果的原则就是,仅保留需要用的CPU功能,多余的使劲砍,需要用的不断优化,自然开销更低,效率也会高一些。 还有一个疑问:从A10返回结果来看,EL0支持AArch32模式(32位),但是不知为何在Project Sandcastle的readme里写道iPhone 7上的安卓不支持32位apk。 参考 Arm Armv8-A Architecture Registers https://developer.arm.com/documentation/ddi0595/2021-06/AArch64-Registers |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 10:23:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |