diff options
Diffstat (limited to 'binutils-2.25/binutils/strings.c')
-rw-r--r-- | binutils-2.25/binutils/strings.c | 53 |
1 files changed, 44 insertions, 9 deletions
diff --git a/binutils-2.25/binutils/strings.c b/binutils-2.25/binutils/strings.c index d5916305..2cf046fd 100644 --- a/binutils-2.25/binutils/strings.c +++ b/binutils-2.25/binutils/strings.c @@ -1,7 +1,5 @@ /* strings -- print the strings of printable characters in files - Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 - Free Software Foundation, Inc. + Copyright (C) 1993-2014 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -23,7 +21,10 @@ Options: --all -a - - Do not scan only the initialized data section of object files. + - Scan each file in its entirety. + + --data + -d Scan only the initialized data section(s) of object files. --print-file-name -f Print the name of the file before each string. @@ -37,6 +38,10 @@ -t {o,x,d} Print the offset within the file before each string, in octal/hex/decimal. + --include-all-whitespace + -w By default tab and space are the only whitepace included in graphic + char sequences. This option considers all of isspace() valid. + -o Like -to. (Some other implementations have -o like -to, others like -td. We chose one arbitrarily.) @@ -70,7 +75,9 @@ #define STRING_ISGRAPHIC(c) \ ( (c) >= 0 \ && (c) <= 255 \ - && ((c) == '\t' || ISPRINT (c) || (encoding == 'S' && (c) > 127))) + && ((c) == '\t' || ISPRINT (c) || (encoding == 'S' && (c) > 127) \ + || (include_all_whitespace == TRUE && ISSPACE (c))) \ + ) #ifndef errno extern int errno; @@ -85,6 +92,9 @@ static int address_radix; /* Minimum length of sequence of graphic chars to trigger output. */ static int string_min; +/* Whether or not we include all whitespace as a graphic char. */ +static bfd_boolean include_all_whitespace; + /* TRUE means print address within file for each string. */ static bfd_boolean print_addresses; @@ -107,9 +117,11 @@ static int encoding_bytes; static struct option long_options[] = { {"all", no_argument, NULL, 'a'}, + {"data", no_argument, NULL, 'd'}, {"print-file-name", no_argument, NULL, 'f'}, {"bytes", required_argument, NULL, 'n'}, {"radix", required_argument, NULL, 't'}, + {"include-all-whitespace", required_argument, NULL, 'w'}, {"encoding", required_argument, NULL, 'e'}, {"target", required_argument, NULL, 'T'}, {"help", no_argument, NULL, 'h'}, @@ -128,7 +140,7 @@ typedef struct static void strings_a_section (bfd *, asection *, void *); static bfd_boolean strings_object_file (const char *); -static bfd_boolean strings_file (char *file); +static bfd_boolean strings_file (char *); static void print_strings (const char *, FILE *, file_ptr, int, int, char *); static void usage (FILE *, int); static long get_char (FILE *, file_ptr *, int *, char **); @@ -156,13 +168,17 @@ main (int argc, char **argv) expandargv (&argc, &argv); string_min = 4; + include_all_whitespace = FALSE; print_addresses = FALSE; print_filenames = FALSE; - datasection_only = TRUE; + if (DEFAULT_STRINGS_ALL) + datasection_only = FALSE; + else + datasection_only = TRUE; target = NULL; encoding = 's'; - while ((optc = getopt_long (argc, argv, "afhHn:ot:e:T:Vv0123456789", + while ((optc = getopt_long (argc, argv, "adfhHn:wot:e:T:Vv0123456789", long_options, (int *) 0)) != EOF) { switch (optc) @@ -171,6 +187,10 @@ main (int argc, char **argv) datasection_only = FALSE; break; + case 'd': + datasection_only = TRUE; + break; + case 'f': print_filenames = TRUE; break; @@ -185,6 +205,10 @@ main (int argc, char **argv) fatal (_("invalid integer argument %s"), optarg); break; + case 'w': + include_all_whitespace = TRUE; + break; + case 'o': print_addresses = TRUE; address_radix = 8; @@ -635,12 +659,23 @@ usage (FILE *stream, int status) { fprintf (stream, _("Usage: %s [option(s)] [file(s)]\n"), program_name); fprintf (stream, _(" Display printable strings in [file(s)] (stdin by default)\n")); - fprintf (stream, _(" The options are:\n\ + fprintf (stream, _(" The options are:\n")); + + if (DEFAULT_STRINGS_ALL) + fprintf (stream, _("\ + -a - --all Scan the entire file, not just the data section [default]\n\ + -d --data Only scan the data sections in the file\n")); + else + fprintf (stream, _("\ -a - --all Scan the entire file, not just the data section\n\ + -d --data Only scan the data sections in the file [default]\n")); + + fprintf (stream, _("\ -f --print-file-name Print the name of the file before each string\n\ -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n\ -<number> least [number] characters (default 4).\n\ -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16\n\ + -w --include-all-whitespace Include all whitespace as valid string characters\n\ -o An alias for --radix=o\n\ -T --target=<BFDNAME> Specify the binary file format\n\ -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n\ |