直接读 /dev/sda 读出的是硬盘数据吗?

新文 发布于 2016/05/05 13:42
阅读 465
收藏 0
#include <stdio.h>
#include <unistd.h>


#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


int main(){


char buf[448];
ssize_t ret ;
int fd_out;


int i;


int fd = open("/dev/sda", O_RDONLY);
if( -1 == fd ){
perror("/dev/sda");
exit(-1);
}


ret = read(fd, buf, 448);


printf("read return %d\n", ret);


if( -1 == ret ){
perror("read");
exit(-1);
}


fd_out = open("boot", O_WRONLY|O_CREAT|O_TRUNC , S_IRWXU);
if( -1 == fd_out ){
perror("boot");
exit(-1);
}


ret = write(fd_out, buf, 448);


printf("write return %d\n", ret);


exit(0);




}


用 open 与 read 读/dev/sda 里面的内容 是硬盘的数据吗,如果是那是不是可以读出前 512 的内容,也就是引导代码

加载中
0
Feng_Yu
Feng_Yu

直接读前512B就是MBR的代码。

但如果硬盘是GPT分区,那么前512就不是MBR

新文
我读了前 512 字节,试图用 objdump 反汇编,但是失败了,提示格式不识别
0
netkiller-
netkiller-

1. 能读,但你不知道都得是什么。

2. 跟文件系统有关 ext4, xfs 比较复杂,没有研究过。 FAT 的可以试试。。

在DOS 干过,FAT有文件分配表,找到分配表,就知道文件的位置。。就可以偏移到指定位置。读取指定长度的数据。

所以建议你看看FAT ,这个比较简单。

新文
读的主磁盘的内容,系统是 ubuntu 14.04
返回顶部
顶部