【发布时间】:2023-03-23 08:43:02
【问题描述】:
这是我关于reading the superblock 的问题的延续。
假设我想针对 Mac OS X 中的 HFS+ 文件系统。我如何读取引导盘的第 2 扇区?据我所知,Unix 只提供系统调用来读取文件,这些文件永远不会存储在那个位置。
这是否需要 1) 程序运行内核模式,或 2) 程序以汇编语言编写?我宁愿避免这些限制中的任何一个,尤其是后者。
【问题讨论】:
标签: filesystems dd sector
这是我关于reading the superblock 的问题的延续。
假设我想针对 Mac OS X 中的 HFS+ 文件系统。我如何读取引导盘的第 2 扇区?据我所知,Unix 只提供系统调用来读取文件,这些文件永远不会存储在那个位置。
这是否需要 1) 程序运行内核模式,或 2) 程序以汇编语言编写?我宁愿避免这些限制中的任何一个,尤其是后者。
【问题讨论】:
标签: filesystems dd sector
我自己在 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 utility 并且可能已经完成了您想做的事情。
【讨论】:
这在权限方面是如何工作的?从 /dev/... 读取会不会不安全,因为如果您阅读得足够远,您将能够读取您没有读取权限的文件?
【讨论】: