4

这是我关于阅读 superblock的问题的延续。

假设我想针对 Mac OS X 中的 HFS+ 文件系统。我如何读取引导盘的第 2 扇区?据我所知,Unix 只提供系统调用来读取文件,这些文件永远不会存储在那个位置。

这是否需要 1) 程序运行内核模式,或 2) 程序以汇编语言编写?我宁愿避免这些限制中的任何一个,尤其是后者。

4

4 回答 4

6

我自己在 Mac 上完成了这项工作,请参阅我的磁盘编辑器工具:http ://apps.tempel.org/iBored

您可以使用 /dev/diskN 或 /dev/rdiskN 打开驱动器(N 是从 0 开始的磁盘索引号)。然后您可以使用 lseek(确保使用 64 位范围的版本!)并对打开的文件进行读/写调用。

此外,使用 shell 命令“ls /dev/disk*”查看当前存在哪些驱动器。请注意,驱动器也存在“sM”扩展名,其中 M 是分区号。这样,也可以直接读取分区。

或者,您可以只使用 shell 工具“xxd”或“dd”来读取数据,然后使用它们的输出。可能会更容易。

但是,除非您以 root 身份运行,否则您将无法读取您的根磁盘和其他内部磁盘。只要用户安装了其他驱动器,或者禁用了它们的权限,您就可以访问其他驱动器。但您可能还需要先卸载驱动器的卷。在 shell 命令“diskutil”中查找卸载命令。

希望这可以帮助。

2017 年更新:在 OS X 10.11 及更高版本上,SIP也可能会阻止您直接访问磁盘扇区。

于 2008-12-05T17:58:47.110 回答
5

在 Linux 中,您可以从特殊设备文件中读取/dev/sda,假设您要读取的硬盘是第一个。您需要是 root 才能读取此文件。要读取扇区 2,您只需寻求偏移2*SECTOR_SIZE并以SECTOR_SIZE字节为单位读取。

我不知道这个设备文件在 OS X 上是否可用。检查下有趣命名的文件,/dev例如/dev/sda/dev/hda

于 2008-12-04T21:10:29.380 回答
1

我还建议点击卷的 /dev/ 设备文件,但您可能想联系 Amit Singh,他编写了一个hfsdebug 实用程序并且可能已经完成了您想做的事情。

于 2008-12-04T21:38:01.680 回答
0

这在权限方面是如何工作的?从 /dev/... 读取不会不安全,因为如果您阅读得足够远,您将能够读取您没有读取权限的文件?

于 2008-12-05T04:08:07.367 回答