有的时候需要dump分区的raw data(没有文件系统)进行分析
/* * out put raw partition image */ #include <stdio.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #define PRELOADER "/dev/preloader" #define BOOTLOADER "/dev/uboot" #define RECOVERYIMG "/dev/recovery" #define BUFFERSIZE (1*1024*1024) static char buff[BUFFERSIZE]; int dumpPartition(char * name, int size) { int i = 0,ret =0; int fdin, fdout; char * inputname[256]={0x00}; char * outputname[256]={0x00}; sprintf(inputname,"/dev/%s",name); sprintf(outputname,"/data/%s.dump",name); printf("inputname is %s , and outputname is %s \n",inputname,outputname); fdin = open(inputname, O_RDONLY); if ((fdin = open (inputname,O_RDONLY)) < 0) { printf("create %s failed\n",inputname); exit(1); } if ((fdout = open (outputname, O_RDWR | O_CREAT | O_TRUNC, 0666)) < 0) { printf("create %s failed \n",outputname); exit(1); } printf("size is %d \n",size); for(i=0;i<size;i++) { ret=read(fdin,buff,BUFFERSIZE); printf("read %d from %s \n",ret,inputname); ret=write(fdout,buff,BUFFERSIZE); printf("write %d to %s \n",ret,outputname); } close(fdin); close(fdout); return 0; } void showhelp() { printf("./rawdump part_name size_m\n"); printf("eg : ./rawdump uboot 1 \n"); printf("please try again \n"); return ; } int main(int argc, char *argv[]) { if(argc!=3) { showhelp(); exit(1); } char * name = argv[1]; int size = atoi(argv[2]); dumpPartition(name, size); return 0; }
具体用法,先编译之,adb push 到 android设备
./rawdump 分区名 需要导出的分区大小