这是我关于阅读 superblock的问题的延续。
假设我想针对 Mac OS X 中的 HFS+ 文件系统。我如何读取引导盘的第 2 扇区?据我所知,Unix 只提供系统调用来读取文件,这些文件永远不会存储在那个位置。
这是否需要 1) 程序运行内核模式,或 2) 程序以汇编语言编写?我宁愿避免这些限制中的任何一个,尤其是后者。
这是我关于阅读 superblock的问题的延续。
假设我想针对 Mac OS X 中的 HFS+ 文件系统。我如何读取引导盘的第 2 扇区?据我所知,Unix 只提供系统调用来读取文件,这些文件永远不会存储在那个位置。
这是否需要 1) 程序运行内核模式,或 2) 程序以汇编语言编写?我宁愿避免这些限制中的任何一个,尤其是后者。
我自己在 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也可能会阻止您直接访问磁盘扇区。
在 Linux 中,您可以从特殊设备文件中读取/dev/sda
,假设您要读取的硬盘是第一个。您需要是 root 才能读取此文件。要读取扇区 2,您只需寻求偏移2*SECTOR_SIZE
并以SECTOR_SIZE
字节为单位读取。
我不知道这个设备文件在 OS X 上是否可用。检查下有趣命名的文件,/dev
例如/dev/sda
或/dev/hda
。
我还建议点击卷的 /dev/ 设备文件,但您可能想联系 Amit Singh,他编写了一个hfsdebug 实用程序并且可能已经完成了您想做的事情。
这在权限方面是如何工作的?从 /dev/... 读取不会不安全,因为如果您阅读得足够远,您将能够读取您没有读取权限的文件?