这是关于reading the superblock的问题的延续。
假设我想在Mac OS X中定位HFS +文件系统。我怎么能读取启动盘的第2扇区?据我所知,Unix只提供系统调用来读取文件,这些文件从不存储在那个位置。
这是否需要1)运行内核模式的程序,或者2)要在Assembly中编写的程序?我宁愿避免这些限制,尤其是后者。
答案 0 :(得分: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”中查找unmount命令。
希望这有帮助。
2017年更新:在OS X 10.11及更高版本SIP上也可能阻止您直接访问磁盘扇区。
答案 1 :(得分:5)
在Linux中,您可以从特殊设备文件/dev/sda
中读取,假设您要读取的硬盘驱动器是第一个。你需要root才能读取这个文件。要读取扇区2,您只需要寻找偏移2*SECTOR_SIZE
并读入SECTOR_SIZE
个字节。
我不知道此设备文件是否在OS X上可用。检查/dev
下的有趣命名文件,例如/dev/sda
或/dev/hda
。
答案 2 :(得分:1)
我还建议点击卷的/ dev / device文件,但你可能想联系Amit Singh,他写了hfsdebug utility并且可能已经做了你想做的事。
答案 3 :(得分:0)
这在权限方面如何运作?不会从/ dev / ...读取是不安全的,因为如果你读得足够远,你将能够读取你没有读取权限的文件吗?