view rvinterf/etmsync/olddump.c @ 107:4be951811791

target-utils/libcommon: extern u_long strtoul(); added where needed
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 01 Nov 2016 01:10:33 +0000
parents e7502631a0f9
children
line wrap: on
line source

/*
 * This utility uses the old TM3 memory read command (in a synchronous manner
 * using our etmsync infrastructure) to read the memory of a GSM device running
 * a compatible fw version; it was written as an aid for reverse-engineering
 * bootloader-locked Mot C139 fw versions.
 */

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include "tm3.h"
#include "localtypes.h"
#include "exitcodes.h"

#define	CHUNK_SIZE	TM3_MEMREAD_MAX

single_op_main(argc, argv)
	char **argv;
{
	u32 addr, len, chunk;
	char buf[CHUNK_SIZE];
	FILE *outf;
	int rc;

	if (argc != 3) {
		fprintf(stderr,
		"usage: fc-olddump [options] start-addr dump-length binfile\n");
		exit(ERROR_USAGE);
	}
	addr = strtoul(argv[0], 0, 16);
	len = strtoul(argv[1], 0, 16);
	outf = fopen(argv[2], "w");
	if (!outf) {
		perror(argv[2]);
		exit(ERROR_UNIX);
	}
	while (len) {
		chunk = len;
		if (chunk > CHUNK_SIZE)
			chunk = CHUNK_SIZE;
		rc = do_memory_read_tm3(addr, buf, chunk);
		if (rc)
			exit(rc);
		fwrite(buf, 1, chunk, outf);
		putchar('.');
		fflush(stdout);
		addr += chunk;
		len -= chunk;
	}
	putchar('\n');
	fclose(outf);
	exit(0);
}