Exemple #1
0
int main(int argc, char** argv){
	char str[256];
	int print = 0;
	if(argc < 3){
		printf("Usage : patchfirm.exe <patches_folder_path> <patch_path> <-v = verbose>\n");
		exit(-1);
	}
	if(argc > 3)
		if(!strcmp(argv[3], "-v")) print = 1;
	listfiles(argv[1]);
	FILE* patch = fopen(argv[2], "wb");
	if(!patch){
		printf("No patch path specified!\n");
		exit(-1);
	}

	fwrite(&npatch, 1, 4, patch);
	for(int i = 0; i < npatch; i++){
		unsigned int off = 0, size = 0;
		sscanf(patch_name[i], "%08x.bin", &off);
		sprintf(str, "%s/%s", argv[1], patch_name[i]);
		FILE* fp = fopen(str, "rb");
		fseek(fp, 0, 2); size = ftell(fp); rewind(fp);
		if(size > 0){
			unsigned char* buf = (unsigned char*) malloc (size);
			fread(buf, 1, size, fp); fclose(fp);
			unsigned int pos = FirmAddr(off);
			fwrite(&pos, 1, 4, patch);
			fwrite(&size, 1, 4, patch);
			fwrite(buf, 1, size, patch);
			while((ftell(patch) % 4) != 0) fputc(0, patch);		//Aligned 4
			if(print) printf("Addr : %08X		Size : %d\n", off, size);
			free(buf);
		}
		fclose(fp);
	}

	return 0;
}
Exemple #2
0
int main(int argc, char** argv) {
    int i;
    char str[256];
    int print = 0;
    if(argc < 4) {
        printf("Usage : patchfirm.exe <patches_folder_path> <patch_path> <mode> <-v = verbose>\n");
        exit(-1);
    }
    if(argc > 4)
        if(!strcmp(argv[4], "-v")) print = 1;
    listfiles(argv[1]);
    FILE* patch = fopen(argv[2], "wb");
    if(!patch) {
        printf("No patch path specified!\n");
        exit(-1);
    }

    firm_info info;
    switch(argv[3][0]) {
    case 'n':
        info = native_info;
        break;
    case 'a':
        info = agb_info;
        break;
    case 't':
        info = twl_info;
        break;
    default :
        info = native_info;
        break;
    }
    printf("cfwtool - generating : %s\n", info.name);
    fwrite(&npatch, 1, 4, patch);
    for(i = 0; i < npatch; i++) {
        unsigned int size = 0;
        sprintf(str, "%s/%s", argv[1], files[i].name);
        FILE* fp = fopen(str, "rb");
        fseek(fp, 0, 2);
        size = ftell(fp);
        rewind(fp);
        if(size > 0) {
            unsigned char* buf = (unsigned char*) malloc (size);
            fread(buf, 1, size, fp);
            fclose(fp);
            unsigned int pos = FirmAddr(files[i].off, info);
            fwrite(&pos, 1, 4, patch);
            fwrite(&size, 1, 4, patch);
            fwrite(buf, 1, size, patch);
            while((ftell(patch) % 4) != 0) fputc(0, patch);		//Aligned 4
            if(print)
                printf("Addr : %08X		Size : %d\n", files[i].off, size);
            free(buf);
        } else {
            fclose(fp);
        }
    }
    fclose(patch);

    return 0;
}