FreeCalypso > hg > freecalypso-sw
changeset 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 | 4e0aa166baa5 |
children | b39802cd9329 |
files | .hgignore target-utils/tf-breakin/Makefile target-utils/tf-breakin/mkembed.c |
diffstat | 3 files changed, 85 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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/
--- 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:
--- /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); +}