2017-05-05 48 views

回答

2

沒有一個,這不是如何ramdisks工作。

對於初學者來說,內核使用ramdisk進行操作,而不是相反。對於我迄今在任何平臺上看到的任何內核ramdisk對都是如此。

此外,從iOS的ramdisk二進制文件是所有用戶態二進制,這意味着:

  • 它們依賴於動態連接器(/usr/lib/dyld)和系統庫。
  • 他們依靠系統調用。
  • 它們依賴於文件系統的可用性。
  • 它們運行在EL0(「userland」),最低特權處理器模式。

如果任何那些想加載內核,將有一系列的問題與:

  • 內核在運行EL1。如果你在EL0中運行,那麼你沒有權限訪問EL1中的任何東西,因此不能在那裏放置任何內核。
  • 鏈接庫和系統調用在EL1工作非常不同:
    • 系統庫中未提供EL1。我想他們可能是可用,但由於在任何給定時間只能有一個在EL1中執行的二進制文件,這聽起來像是一個巨大的矯枉過正。
    • iOS中存在EL1的鏈接器(KXLD),但是它是iOS內核的一部分,其設計用於將內核擴展鏈接到內核。它不在用戶級二進制文件上運行。
    • 儘管在技術上你可以從EL1中產生一個例外,並且使用svc指令來激活EL1,但你自己會被調用來處理它,這意味着在加載內核之前,你的的內核。 Userland二進制文件不能爲此準備。

這就是說,我不知道你的圖像所要表達的。我最好的猜測是,這意味着表示的虛擬盤是傳遞給內核的。無論如何,iBoot是加載和設置內核的一個。

+0

但是我聽說iBEC在恢復模式啓動(更新)期間加載內核。 –

+0

你沒有錯,但是在iBEC和iBoot或iBSS和iLLB之間進行二進制比較(你可以從任何32位iOS 10 IPSW中獲得未加密的) - 唯一不同的是標識符('ibec'和' ibot'或'ibss' vs'illb'),其餘的100%是相同的。所以iBEC _is_ iBoot。 – Siguza