FreeCalypso > hg > freecalypso-sw
diff target-utils/tf-breakin/mkembed.c @ 357:22c6e39e1789
target-utils/tf-breakin: build embeddable form of the payload
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Thu, 15 May 2014 09:49:30 +0000 |
parents | |
children | 7166c8311b0d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/target-utils/tf-breakin/mkembed.c Thu May 15 09:49:30 2014 +0000 @@ -0,0 +1,75 @@ +#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); +}