diff options
author | Soren Sandmann <sandmann@daimi.au.dk> | 2006-08-21 03:34:44 +0000 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@src.gnome.org> | 2006-08-21 03:34:44 +0000 |
commit | 66a28bd5010c4a5379293ca291d88554375f8fa7 (patch) | |
tree | 2c2c6f30891112dc3fa2642cc5d6ed96e8248439 /elfparser.c | |
parent | a880ee7f60cbfb5b20c5a4d0aef5f6cfd38840d6 (diff) |
Comment out debug spew. (elf_parser_lookup_symbol): Add check that address
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.
Diffstat (limited to 'elfparser.c')
-rw-r--r-- | elfparser.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/elfparser.c b/elfparser.c index 88e238e..7153be3 100644 --- a/elfparser.c +++ b/elfparser.c @@ -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 * |