/* TODO: 1. check the ARM EABI version--this works for versions 1 and 2. 2. use a more-intelligent approach to finding the symbol table, symbol-string table, and the .dynamic section. 3. fix the determination of the host and ELF-file endianness 4. write the help screen */ #include <stdio.h> #include <common.h> #include <debug.h> #include <libelf.h> #include <elf.h> #include <gelf.h> #include <cmdline.h> #include <string.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <lsd.h> /* Flag set by --verbose. This variable is global as it is accessed by the macro INFO() in multiple compilation unites. */ int verbose_flag = 0; /* Flag set by --quiet. This variable is global as it is accessed by the macro PRINT() in multiple compilation unites. */ int quiet_flag = 0; int main(int argc, char **argv) { char **lookup_dirs = NULL; int num_lookup_dirs; int print_info; int list_needed_libs; /* Do not issue INFO() statements before you call get_options() to set the verbose flag as necessary. */ int first = get_options(argc, argv, &list_needed_libs, &print_info, &lookup_dirs, &num_lookup_dirs, &verbose_flag); if (first == argc) { print_help(); FAILIF(1, "You must specify at least one input ELF file!\n"); } /* Check to see whether the ELF library is current. */ FAILIF (elf_version(EV_CURRENT) == EV_NONE, "libelf is out of date!\n"); /* List symbol dependencies... */ lsd(&argv[first], argc - first, list_needed_libs, print_info, lookup_dirs, num_lookup_dirs); FREE(lookup_dirs); return 0; }