我刚刚阅读了this关于在ISO 9660文件系统上读取文件的文章,我对如何将文件读入内存感到困惑。我知道根目录位于PVD的偏移量156处,如何使用它来查找驻留在根目录中的文件,一旦找到文件名,我将如何找到该文件所在的地址,这样我就可以将它加载到内存中(使用int 0x13 AH = 42)?
答案 0 :(得分: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,您需要从Directory entry for the root directory
(位于偏移156处)阅读Primary Volume Descriptor
。然后,您对Location of extent (LBA)
的{{1}}(偏移2)和Data length (size of extent)
(偏移10)感兴趣。它们告诉您目录数据(文件/目录列表)所在的位置以及目录数据的大小。
此列表基本上是长度可变的相同目录条目的列表(由于可变文件/目录名称长度和填充)。当您阅读它时,您需要查看每个条目的Directory entry for the root directory
以确定它是文件还是目录。如果它是一个目录而您想要访问它,则以递归方式重复整个过程。如果它是一个文件,File flags
(偏移2)和Location of extent (LBA)
(偏移10)告诉你它在哪里以及它有多大。
希望我没有搞砸了,因为我没有方便的旧CD代码。
哦,请注意,上面是一个非常简单的描述,你应该如何阅读CD,大多数CD,但不是全部。 FS不必要地通用且复杂,并且有许多功能和选项使得在所有情况下都难以正确读取它。
我建议您获得一些Data length (size of extent)
文件,十六进制编辑器和计算器,并仔细检查逻辑并更好地熟悉文件系统。