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().
}
}
+#if 0
g_print ("load address is: %8p\n", (void *)load_address);
+#endif
return load_address;
}
elf_parser_lookup_symbol (ElfParser *parser,
gulong address)
{
+ const ElfSym *result;
+ gsize size;
+
if (!parser->symbols)
read_symbols (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 *