summaryrefslogtreecommitdiff
path: root/elfparser.c
diff options
context:
space:
mode:
authorSoren Sandmann <sandmann@daimi.au.dk>2006-08-21 03:34:44 +0000
committerSøren Sandmann Pedersen <ssp@src.gnome.org>2006-08-21 03:34:44 +0000
commit66a28bd5010c4a5379293ca291d88554375f8fa7 (patch)
tree2c2c6f30891112dc3fa2642cc5d6ed96e8248439 /elfparser.c
parenta880ee7f60cbfb5b20c5a4d0aef5f6cfd38840d6 (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.c25
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 *