2012-03-16 54 views
4

剛剛完成閱讀this關於讀取ISO 9660文件系統上的文件的文章,我對如何將文件讀入內存感到困惑。我知道根目錄駐留在PVD的偏移量156處,我如何使用它來查找駐留在根目錄中的文件,並且一旦找到文件名,我將如何找到該文件駐留的地址,這樣我可以將它加載到內存中(使用int 0x13 AH = 42)?在ISO 9660文件系統上加載文件

回答

7

BIOS可能無法通過int 13h直接訪問CD驅動器,只能使用int 13h直接訪問軟盤和HDD。如果你從CD啓動(如果你的BIOS支持),你可以使用int 13h來訪問CD,但是唯一可以保證工作的選項是仿真模式,在這種模式下你不會訪問整個CD ,但引導映像好像它是FDD或HDD(在這種情況下,BIOS通常將驅動器編號0或80h分配給模擬磁盤AKA A:C:)。有關於這個問題的討論here

您可能需要編寫一個CD驅動程序,以使用I/O端口直接從它讀取數據。

對於ISO9660,您需要從Primary Volume Descriptor(位於偏移量156)處讀取Directory entry for the root directory。那麼你對Location of extent (LBA)(偏移量2)和Data length (size of extent)(偏移量10)感興趣的範圍是Directory entry for the root directory。這些告訴你目錄數據(文件/目錄列表)所在的位置以及它的大小。

該列表基本上是長度可變的相同目錄條目的列表(由於可變文件/目錄名稱長度和填充)。當你閱讀它時,你需要查看每個條目的File flags以確定它是文件還是目錄。如果它是一個目錄並且您想要訪問它,則可以遞歸地重複整個過程。如果是文件,Location of extent (LBA)(偏移量2)和Data length (size of extent)(偏移量10)會告訴你它在哪裏以及它有多大。

希望我沒有搞砸了,因爲我沒有我的舊CD代碼方便。

哦,並且被警告,以上是關於如何閱讀CD,大多數CD,但不是全部的簡單描述。 FS是不必要的一般和複雜的,並有許多功能和選項,使它很難在所有情況下正確閱讀它。

我建議你得到一些.iso文件,十六進制編輯器和計算器,並仔細檢查邏輯,更好地與文件系統的熟悉。

+0

謝謝,現在有更多的意義,當我得到時間時,我會仔細檢查你的邏輯。 – Codesmith 2012-03-16 12:24:48