view target-utils/tf-breakin/mkembed.c @ 426:1060bf70d95d

doc/Compal-unlock: added cautionary note about flashing firmwares containing boot code that checks the word at 0x2060
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sat, 21 Jun 2014 06:55:27 +0000
parents 22c6e39e1789
children 7166c8311b0d
line wrap: on
line source

#include <sys/types.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define	PAYLOAD_SIZE	112
u_char payload_buf[PAYLOAD_SIZE];

read_binary(filename)
	char *filename;
{
	int fd;
	struct stat st;

	fd = open(filename, O_RDONLY);
	if (fd < 0) {
		perror(filename);
		exit(1);
	}
	fstat(fd, &st);
	if (!S_ISREG(st.st_mode)) {
		fprintf(stderr, "error: %s is not a regular file\n", filename);
		exit(1);
	}
	if (st.st_size != PAYLOAD_SIZE) {
		fprintf(stderr, "error: %s size mismatch\n", filename);
		exit(1);
	}
	if (read(fd, payload_buf, PAYLOAD_SIZE) != PAYLOAD_SIZE) {
		perror("read error");
		exit(1);
	}
	close(fd);
}

write_output(filename)
	char *filename;
{
	FILE *of;
	int i, j, idx;

	of = fopen(filename, "w");
	if (!of) {
		perror(filename);
		exit(1);
	}
	fprintf(of, "u_char payload[%d] = {\n", PAYLOAD_SIZE);
	idx = 0;
	for (i = 0; i < 14; i++) {
		for (j = 0; j < 8; j++) {
			if (j)
				putc(' ', of);
			else
				putc('\t', of);
			fprintf(of, "0x%02X,", payload_buf[idx++]);
		}
		putc('\n', of);
	}
	fputs("};\n", of);
	fclose(of);
}

main(argc, argv)
	char **argv;
{
	if (argc != 3) {
		fprintf(stderr, "usage: %s payload.bin output.c\n", argv[0]);
		exit(1);
	}
	read_binary(argv[1]);
	write_output(argv[2]);
	exit(0);
}