FreeCalypso > hg > freecalypso-reveng
view objgrep/main.c @ 215:d69f7512e3c1
Pirelli: documented and verified the checksum scheme used for the factory block
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 25 Dec 2016 23:48:16 +0000 |
parents | 77cd647375e5 |
children |
line wrap: on
line source
/* * objgrep main() function */ #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <unistd.h> #include "globals.h" #include "intstruct.h" static int rflag, sflag; main(argc, argv) char **argv; { unsigned n; int c; extern int optind; while ((c = getopt(argc, argv, "rs")) != EOF) switch (c) { case 'r': rflag++; continue; case 's': sflag++; continue; default: usage: fprintf(stderr, "usage: %s [-rs] objfile section binfile\n", argv[0]); exit(2); } if (argc - optind != 3) goto usage; objfilename = argv[optind]; mmap_objfile(); initial_parse_hdr(); get_int_section_table(); for (n = 0; n < nsections; n++) if (!strcmp(sections[n].name, argv[optind+1])) { grep_section = sections + n; break; } if (!grep_section) { fprintf(stderr, "no section named \"%s\" found in %s\n", argv[optind+1], objfilename); exit(2); } if (!grep_section->size) { printf("%s:%s is empty\n", objfilename, grep_section->name); exit(1); } get_int_symbol_table(); prepare_pattern(); binfilename = argv[optind+2]; mmap_binfile(); if (!do_grep()) { printf("no match\n"); exit(1); } printf("%s:%s found in %s at 0x%x\n", objfilename, grep_section->name, binfilename, match_offset); if (sflag) dump_symtab_on_match(); if (rflag && grep_section->nreloc) { process_relocs_on_match(); if (nreloc_ext) dump_ext_relocs_on_match(); if (nreloc_int) dump_reloc_symtab_on_match(); } exit(0); }