Update Ramdisk 中的哪个二进制文件在 iOS 更新期间加载内核?
What binary in the Update Ramdisk loads the Kernel during an iOS update?
上图表示更新 Ramdisk 在 iOS 更新期间加载内核。如果是 binary (ASR
, etc.) 在 iOS 10.3.1 更新 Ramdisk 加载内核?
None 其中,ramdisk 不是这样工作的。
对于初学者来说,内核在 ramdisk 上运行,而不是相反。到目前为止,我在任何平台上看到的任何内核-ramdisk 对都是如此。
此外,来自 iOS ramdisks 的二进制文件都是 userland 二进制文件,这意味着:
- 他们依赖于动态 linker (
/usr/lib/dyld
) 和系统库。
- 他们依赖于系统调用。
- 他们依赖于文件系统的可用性。
- 他们运行在EL0("userland"),最低特权处理器模式。
如果其中任何一个想要加载内核,就会有很多问题:
- EL1 中的内核 运行。如果你在 EL0 中 运行,那么你没有权限访问 EL1 中的任何内容,因此不能在其中放置任何内核。
- 链接、库和系统调用在 EL1 中的工作方式非常不同:
- 系统库在 EL1 中不可用。我想它们可以 制作 可用,但是由于在任何给定时间只能在 EL1 中执行一个二进制文件,这听起来有点矫枉过正。
- 在 iOS (KXLD) 中存在一个用于 EL1 的 linker,但它是 iOS 内核的一部分,它被设计为 link 内核扩展到内核。它不适用于用户态二进制文件。
- 虽然从技术上讲,您可以使用
svc
指令从 EL1 生成针对 EL1 的异常,但您自己将被调用来处理它,这意味着在您加载内核之前,您 内核。 Userland 二进制文件没有为此准备。
也就是说,我不确定您的图片想要表达什么。我最好的猜测是,这意味着指定的 ramdisk 已 传递 到内核。不过无论如何,iBoot 是加载和设置内核的工具。
上图表示更新 Ramdisk 在 iOS 更新期间加载内核。如果是 binary (ASR
, etc.) 在 iOS 10.3.1 更新 Ramdisk 加载内核?
None 其中,ramdisk 不是这样工作的。
对于初学者来说,内核在 ramdisk 上运行,而不是相反。到目前为止,我在任何平台上看到的任何内核-ramdisk 对都是如此。
此外,来自 iOS ramdisks 的二进制文件都是 userland 二进制文件,这意味着:
- 他们依赖于动态 linker (
/usr/lib/dyld
) 和系统库。 - 他们依赖于系统调用。
- 他们依赖于文件系统的可用性。
- 他们运行在EL0("userland"),最低特权处理器模式。
如果其中任何一个想要加载内核,就会有很多问题:
- EL1 中的内核 运行。如果你在 EL0 中 运行,那么你没有权限访问 EL1 中的任何内容,因此不能在其中放置任何内核。
- 链接、库和系统调用在 EL1 中的工作方式非常不同:
- 系统库在 EL1 中不可用。我想它们可以 制作 可用,但是由于在任何给定时间只能在 EL1 中执行一个二进制文件,这听起来有点矫枉过正。
- 在 iOS (KXLD) 中存在一个用于 EL1 的 linker,但它是 iOS 内核的一部分,它被设计为 link 内核扩展到内核。它不适用于用户态二进制文件。
- 虽然从技术上讲,您可以使用
svc
指令从 EL1 生成针对 EL1 的异常,但您自己将被调用来处理它,这意味着在您加载内核之前,您 内核。 Userland 二进制文件没有为此准备。
也就是说,我不确定您的图片想要表达什么。我最好的猜测是,这意味着指定的 ramdisk 已 传递 到内核。不过无论如何,iBoot 是加载和设置内核的工具。