android dump 分区
16lz
2021-01-23
有的时候需要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 分区名 需要导出的分区大小