2008-12-04 60 views
4

这是我的关于reading the superblock的问题的延续。在启动盘上读取一个扇区

比方说,我想在Mac OS X中定位HFS +文件系统。我怎么读取启动盘的扇区2?据我所知,Unix只提供系统调用来读取文件,这些文件永远不会存储在该位置。

这是否需要1)运行内核模式的程序,或2)要在Assembly中编写的程序?我宁愿避免这些限制之一,特别是后者。

回答

5

在Linux中,您可以从特殊设备文件/dev/sda中读取,假设您想要读取的硬盘是第一个。你需要成为root才能读取这个文件。要读取扇区2,您只需设法抵消2*SECTOR_SIZE并读取SECTOR_SIZE字节。

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

+0

嗯......我的机器上没有/ dev的sda或hda。有一些有趣的东西,比如disk0,我会看一看。 – titaniumdecoy 2008-12-04 21:58:04

1

我还打算建议打到卷的/ dev/device文件,但是你可能想联系Amit Singh,他已经写了hfsdebug utility并且可能已经完成了你想做的事情。

0

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

+1

只有超级用户(root)可以读取原始磁盘文件(Linux上的/ dev/sda,OS X上的/ dev/disk0)。 – 2008-12-05 04:29:40

6

我在Mac上这样做我自己,看到我的磁盘编辑工具:http://apps.tempel.org/iBored

你会使用在/ dev/diskN的或/ dev/rdiskN中(N是一个磁盘索引号开始打开驱动器从0开始)。然后,您可以使用lseek(确保使用64位版本!)并在打开的文件上读/写调用。

另外,使用shell命令“ls/dev/disk *”查看当前存在哪些驱动器。并注意驱动器也存在一个“sM”扩展名,其中M是分区号。这样,也可以直接读取分区。或者,您可以使用shell工具“xxd”或“dd”读取数据,然后使用它们的输出。可能会更容易。

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

希望这会有所帮助。

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

+0

我知道这是一个古老的线程,但托马斯,该链接不工作。你能指出你的磁盘编辑器工具的正确URL吗?谢谢。 – bschandramohan 2012-01-10 17:04:40