utils: add symbol range support for binfile and elfparser

This commit is contained in:
Christian Hergert
2019-05-28 12:13:49 -07:00
parent f18a7171cf
commit e39feeeeb0
4 changed files with 61 additions and 22 deletions

View File

@ -536,3 +536,24 @@ bin_symbol_get_address (bin_file_t *file,
return elf_parser_get_sym_address (elf, sym); return elf_parser_get_sym_address (elf, sym);
} }
} }
void
bin_symbol_get_address_range (bin_file_t *file,
const bin_symbol_t *symbol,
gulong *begin,
gulong *end)
{
if (file->undefined_name == (char *)symbol)
{
*begin = 0;
*end = 0;
}
else
{
ElfParser *elf;
const ElfSym *sym;
sym = get_elf_sym (file, symbol, &elf);
elf_parser_get_sym_address_range (elf, sym, begin, end);
}
}

View File

@ -42,5 +42,9 @@ const char *bin_symbol_get_name (bin_file_t *bin_file,
const bin_symbol_t *symbol); const bin_symbol_t *symbol);
gulong bin_symbol_get_address (bin_file_t *bin_file, gulong bin_symbol_get_address (bin_file_t *bin_file,
const bin_symbol_t *symbol); const bin_symbol_t *symbol);
void bin_symbol_get_address_range (bin_file_t *bin_file,
const bin_symbol_t *symbol,
gulong *begin,
gulong *end);
#endif #endif

View File

@ -811,6 +811,16 @@ elf_parser_get_sym_address (ElfParser *parser,
return sym->address - parser->text_section->load_address; return sym->address - parser->text_section->load_address;
} }
void
elf_parser_get_sym_address_range (ElfParser *parser,
const ElfSym *sym,
gulong *begin,
gulong *end)
{
*begin = sym->address - parser->text_section->load_address;
*end = *begin + st_size (parser, sym->table, sym->offset);
}
/* /*
* Utility functions * Utility functions
*/ */

View File

@ -55,4 +55,8 @@ gulong elf_parser_get_sym_address (ElfParser *parser,
gboolean elf_parser_owns_symbol (ElfParser *parser, gboolean elf_parser_owns_symbol (ElfParser *parser,
const ElfSym *sym); const ElfSym *sym);
char *elf_demangle (const char *name); char *elf_demangle (const char *name);
void elf_parser_get_sym_address_range (ElfParser *parser,
const ElfSym *sym,
gulong *begin,
gulong *end);