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 是加载和设置内核的工具。