# HG changeset patch # User Michael Spacefalcon # Date 1400147370 0 # Node ID 22c6e39e17895a196208e2404db9006cafc6219a # Parent 4e0aa166baa5cdc397b4da91f171f9512098b107 target-utils/tf-breakin: build embeddable form of the payload diff -r 4e0aa166baa5 -r 22c6e39e1789 .hgignore --- a/.hgignore Thu May 15 09:18:23 2014 +0000 +++ b/.hgignore Thu May 15 09:49:30 2014 +0000 @@ -32,6 +32,8 @@ ^rvinterf/tmsh/fc-tmsh$ ^target-utils/.*/crt0\.S$ +^target-utils/tf-breakin/embed\.c$ +^target-utils/tf-breakin/mkembed$ ^toolchain/binutils-2\.21\.1/ ^toolchain/binutils-build/ diff -r 4e0aa166baa5 -r 22c6e39e1789 target-utils/tf-breakin/Makefile --- a/target-utils/tf-breakin/Makefile Thu May 15 09:18:23 2014 +0000 +++ b/target-utils/tf-breakin/Makefile Thu May 15 09:49:30 2014 +0000 @@ -1,14 +1,20 @@ CC= arm-elf-gcc OBJCOPY=arm-elf-objcopy -all: payload.bin +all: payload.o payload.bin embed.c .SUFFIXES: .o .bin .o.bin: ${OBJCOPY} -O binary $< $@ +mkembed: mkembed.c + gcc -O2 -o $@ $@.c + +embed.c: payload.bin mkembed + ./mkembed payload.bin $@ + clean: - rm -f *.o *errs *core *.bin + rm -f *.o *errs *core *.bin mkembed embed.c FRC: diff -r 4e0aa166baa5 -r 22c6e39e1789 target-utils/tf-breakin/mkembed.c --- /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 +#include +#include +#include +#include +#include + +#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); +}