Comment out debug spew. (elf_parser_lookup_symbol): Add check that address
authorSoren Sandmann <sandmann@daimi.au.dk>
Mon, 21 Aug 2006 03:34:44 +0000 (03:34 +0000)
committerSøren Sandmann Pedersen <ssp@src.gnome.org>
Mon, 21 Aug 2006 03:34:44 +0000 (03:34 +0000)
2006-08-20  Soren Sandmann  <sandmann@daimi.au.dk>

* elfparser.c (elf_parser_get_load_address): Comment out debug spew.
(elf_parser_lookup_symbol): Add check that address is actually
within the bounds of the found function.

ChangeLog
elfparser.c

index 62b227a..fec853f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2006-08-20  Soren Sandmann  <sandmann@daimi.au.dk>
 
+       * elfparser.c (elf_parser_get_load_address): Comment out debug spew.
+       (elf_parser_lookup_symbol): Add check that address is actually
+       within the bounds of the found function.
+
+2006-08-20  Soren Sandmann  <sandmann@daimi.au.dk>
+
        * process.h: Make process_lookup_symbol() return a string. Delete
        process_lookup_symbol_with_filename().
 
index 88e238e..7153be3 100644 (file)
@@ -411,7 +411,9 @@ elf_parser_get_load_address (ElfParser *parser)
        }
     }
 
+#if 0
     g_print ("load address is: %8p\n", (void *)load_address);
+#endif
     
     return load_address;
 }
@@ -453,6 +455,9 @@ const ElfSym *
 elf_parser_lookup_symbol (ElfParser *parser,
                          gulong     address)
 {
+    const ElfSym *result;
+    gsize size;
+    
     if (!parser->symbols)
        read_symbols (parser);
 
@@ -465,10 +470,22 @@ elf_parser_lookup_symbol (ElfParser *parser,
     g_print ("the address we are looking up is %p\n", address);
 #endif
     
-    /* FIXME: we should look at the symbol size and check if the
-     * address is actually within the function.
-     */
-    return do_lookup (parser->symbols, address, 0, parser->n_symbols - 1);
+    result = do_lookup (parser->symbols, address, 0, parser->n_symbols - 1);
+
+    if (result)
+    {
+       /* Check that address is actually within the function */
+       bin_parser_begin (parser->parser, parser->sym_format, result->offset);
+       
+       size = bin_parser_get_uint (parser->parser, "st_size");
+       
+       if (result->address + size > address)
+           result = NULL;
+       
+       bin_parser_end (parser->parser);
+    }
+
+    return result;
 }
 
 static ElfParser *