From 66a28bd5010c4a5379293ca291d88554375f8fa7 Mon Sep 17 00:00:00 2001 From: Soren Sandmann Date: Mon, 21 Aug 2006 03:34:44 +0000 Subject: [PATCH] Comment out debug spew. (elf_parser_lookup_symbol): Add check that address 2006-08-20 Soren Sandmann * 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 | 6 ++++++ elfparser.c | 25 +++++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 62b227a8..fec853f8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-08-20 Soren Sandmann + + * 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 * process.h: Make process_lookup_symbol() return a string. Delete diff --git a/elfparser.c b/elfparser.c index 88e238e8..7153be39 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 *