读取启动磁盘上的扇区

4
这是我关于读取超级块的问题的延续。
假设我想针对Mac OS X中的HFS+文件系统进行操作。如何读取引导磁盘的第2个扇区?据我所知,Unix只提供了用于从文件中读取的系统调用,这些文件从未存储在该位置。
这是否需要程序以内核模式运行,或者使用汇编语言编写程序?我希望避免这两个限制,特别是后者。
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也可能阻止您直接访问磁盘扇区。


我知道这是一个旧帖子,但Thomas,链接已经失效了。你能指出你的磁盘编辑器工具的正确URL吗?谢谢。 - bschandramohan
明白了...我为你搜索并查看了你的网站,找到了这个链接:http://apps.tempel.org/iBored/ 虽然我无法在Mac OS X(10.6)上运行它,但我会通过邮件发送更多细节,以免扰乱这个主题。 - bschandramohan

5
在Linux中,你可以从特殊的设备文件/dev/sda读取数据,假设你要读取的硬盘是第一个。你需要以root权限读取这个文件。要读取第2个扇区,只需将偏移量设置为2*SECTOR_SIZE并读取SECTOR_SIZE字节。
我不确定这个设备文件在OS X上是否可用。请检查/dev目录下的有趣命名的文件,例如/dev/sda/dev/hda

哦,我的机器上的/dev目录下没有sda或hda。不过有一些有趣的设备,比如disk0,我会去看看的。 - titaniumdecoy

1
我也想建议访问 /dev/ 设备文件来获取卷的信息,但你可能需要联系 Amit Singh,他编写了一个 hfsdebug 实用工具,可能已经做了你想做的事情。

0
这个在权限方面如何工作?从 /dev/... 读取不安全,因为如果你读得够深,你就可以读取没有读取权限的文件吗?

1
只有超级用户(root)可以读取原始磁盘文件(Linux 上的 /dev/sda,OS X 上的 /dev/disk0)。 - Adam Rosenfield

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接