cod*_*ith 4 filesystems x86 assembly bios iso9660
我刚刚读完这在ISO 9660文件系统读取文件的文章,我对我怎么会去读取文件到内存困惑.我知道根目录位于PVD的偏移量156处,如何使用它来查找驻留在根目录中的文件,一旦找到文件名,我将如何找到该文件所在的地址,这样我就可以将它加载到内存中(使用int 0x13 AH = 42)?
BIOS可能无法通过int 13h直接访问CD驱动器,只能使用int 13h直接访问软盘和HDD.如果你从CD启动(如果你的BIOS支持),你可以使用int 13h访问CD,但是唯一可以保证工作的选项是仿真模式,你将访问不是整个CD ,但是启动映像就好像它是FDD或HDD(在这种情况下,BIOS通常将驱动器号0或80h分配给模拟磁盘AKA A:和C:).有这个问题的讨论在这里.
您可能需要编写CD驱动程序以使用I/O端口直接从中读取数据.
至于ISO9660,你需要阅读Directory entry for the root directory的Primary Volume Descriptor(这是在偏移量156).然后你对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文件,十六进制编辑器和计算器,并仔细检查逻辑并更好地熟悉文件系统.
| 归档时间: |
|
| 查看次数: |
1294 次 |
| 最近记录: |