这是关于阅读超级块的问题的延续.
假设我想在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"中查找unmount命令.
希望这可以帮助.
2017年更新:在OS X 10.11及更高版本上,SIP也可能阻止您直接访问磁盘扇区.
在Linux中,您可以从特殊设备文件中读取/dev/sda
,假设您要读取的硬盘驱动器是第一个.你需要root才能读取这个文件.要读取扇区2,您只需要2*SECTOR_SIZE
以SECTOR_SIZE
字节为单位进行偏移和读取.
我不知道这个设备文件是否在OS X上可用.检查有趣的命名文件,/dev
例如/dev/sda
或/dev/hda
.