From fca59bea770346cf1c1f9b0e00cb48a61b44a8f3 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 25 Oct 2015 21:00:20 +0100 Subject: import of old now defunct presentation slides svn repo --- 2003/firmware-reveng-ccc2003/magic_ofs.c | 79 ++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 2003/firmware-reveng-ccc2003/magic_ofs.c (limited to '2003/firmware-reveng-ccc2003/magic_ofs.c') diff --git a/2003/firmware-reveng-ccc2003/magic_ofs.c b/2003/firmware-reveng-ccc2003/magic_ofs.c new file mode 100644 index 0000000..a83f593 --- /dev/null +++ b/2003/firmware-reveng-ccc2003/magic_ofs.c @@ -0,0 +1,79 @@ +#include +#include +#include + +#include +#include +#include + +#include + +/* magic_ofs - check for 'file' magic at any possible offset within a file + * + * (C) 2003 by Harald Welte + * + * This code is subject to the GNU GPL v2 + */ + +int main(int argc, char **argv) +{ + struct stat st; + magic_t cookie; + int fd; + off_t i; + void *mem; + + if (argc < 2) { + fprintf(stderr, "you have to name a file\n"); + exit(2); + } + + if (!strlen(argv[1])) { + fprintf(stderr, "empty argument\n"); + exit(2); + } + + fd = open(argv[1], 0); + if (fd < 0) { + fprintf(stderr, "unable to open file\n"); + exit(1); + } + + if (fstat(fd, &st)) { + fprintf(stderr, "unable to stat file\n"); + exit(1); + } + + mem = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, (off_t ) 0); + if (!mem) { + fprintf(stderr, "unable to mmap file\n"); + exit(1); + } + + cookie = magic_open(MAGIC_CONTINUE); + if (!cookie) { + fprintf(stderr, "error opening libmagic\n"); + exit(1); + } + + if (magic_load(cookie, NULL)) { + fprintf(stderr, "error during magic_load\n"); + magic_close(cookie); + exit(1); + } + + for (i = 0; i < st.st_size; i++) { + const char *desc; + desc = magic_buffer(cookie, mem+i, st.st_size - i); + if (!desc) { + break; + } + if (!strcmp(desc, "data")) { + continue; + } + printf("%8.8u: %s\n", i, desc); + } + + magic_close(cookie); + exit(0); +} -- cgit v1.2.3