剛剛完成閱讀this關於讀取ISO 9660文件系統上的文件的文章,我對如何將文件讀入內存感到困惑。我知道根目錄駐留在PVD的偏移量156處,我如何使用它來查找駐留在根目錄中的文件,並且一旦找到文件名,我將如何找到該文件駐留的地址,這樣我可以將它加載到內存中(使用int 0x13 AH = 42)?在ISO 9660文件系統上加載文件
回答
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
文件,十六進制編輯器和計算器,並仔細檢查邏輯,更好地與文件系統的熟悉。
- 1. 如何預測ISO 9660文件系統的大小?
- 2. Restkit:在系統上下載文件
- 3. 在文件加密文件系統
- 4. 在運行時將文件系統中的類加載到文件系統中
- 5. iOS下載文件到文件系統?
- 6. 正在下載ISO文件
- 7. 加載Flash文件(.swf文件)的WebView在android系統
- 8. 從JAR或文件系統加載ImageIcon
- 9. 從angularjs的文件系統加載
- 10. unix上的掛載文件系統
- 11. Picasso從文件系統加載圖像
- 12. Jboss從文件加載系統屬性
- 13. <上下文:從文件系統加載屬性佔位符
- 14. 卸載proc文件系統
- 15. 將文件上傳到文件系統
- 16. 如何在設備文件系統上加載apk並啓動
- 17. 在文件系統上搜索文檔
- 18. 在Linux/Unix文件系統上將可執行文件掛載爲文件
- 19. 從Jboss Fuse/Karaf文件系統中加載屬性文件Nullpointer
- 20. 從擴展名爲chrome的文件系統加載html文件
- 21. 無法使用ResourceBundle從文件系統加載文件
- 22. 預加載.ko文件到linux文件系統
- 23. 使用util:屬性從文件系統加載屬性文件?
- 24. UIWebView從本地文件系統加載HTML文件
- 25. PHP文件上傳系統
- 26. 書上的文件系統
- 27. 文件上傳系統
- 28. 從unix系統在oracle中加載文本文件
- 29. 的Hadoop文件系統是物理文件系統或虛擬文件系統
- 30. jinja2文件系統加載器加載所有子目錄
謝謝,現在有更多的意義,當我得到時間時,我會仔細檢查你的邏輯。 – Codesmith 2012-03-16 12:24:48