【问题标题】:Loading a file on an ISO 9660 File System在 ISO 9660 文件系统上加载文件
【发布时间】:2012-03-16 03:14:20
【问题描述】:

我刚刚读完 this 关于在 ISO 9660 文件系统上读取文件的文章,我对如何将文件读入内存感到困惑。我知道根目录位于 PVD ​​的偏移量 156,我将如何使用它来查找位于根目录中的文件,一旦找到文件名,我将如何找到该文件所在的地址,这样我就可以将它加载到内存中(使用 int 0x13 AH=42)?

【问题讨论】:

    标签: assembly filesystems x86 bios iso9660


    【解决方案1】:

    BIOS 可能无法通过 int 13h 直接访问 CD 驱动器,只有软盘和 HDD 始终可以通过 int 13h 直接访问。如果您从 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。那么你对Directory entry for the root directory 中的Location of extent (LBA)(偏移量2)和Data length (size of extent)(偏移量10)感兴趣。这些告诉您目录数据(文件/目录列表)驻留在哪里以及它有多大。

    此列表基本上是长度可变的相同目录条目的列表(由于可变文件/目录名称长度和填充)。当您阅读它时,您需要查看每个条目的File flags 以确定它是文件还是目录。如果它是一个目录并且你想访问它,你递归地重复整个过程。如果是文件,Location of extent (LBA)(偏移量 2)和Data length (size of extent)(偏移量 10)会告诉您它在哪里以及它有多大。

    希望我没有搞砸,因为我手边没有旧的 CD 代码。

    哦,请注意,以上是关于如何阅读 CD 的非常简单的描述,大多数 CD,但不是全部。 FS 过于笼统和复杂,并且有许多功能和选项,因此很难在所有情况下正确阅读。

    我建议您获取一些.iso 文件、一个十六进制编辑器和一个计算器,并仔细检查逻辑并更好地熟悉文件系统。

    【讨论】:

    • 谢谢,现在更有意义了,有时间我会仔细检查你的逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多