symbols

This module select the symbols to be used in symbolic expressions and declares the predicates needed to infer new symbols.

inferred_symbol(EA:address, SymbolName:symbol, Scope:symbol, Visibility:symbol, Type:symbol, Pos:symbol_position)

A new symbol ‘SymbolName’ at address ‘EA’ should be created.

inferred_special_symbol(EA:address, SymbolName:symbol, Scope:symbol, Visibility:symbol, Type:symbol, Pos:symbol_position)

A special symbol ‘SymbolName’ at address ‘EA’ has been inferred. Special inferred symbols have higher priority than regular inferred symbols.

best_symexpr_symbol(EA:address, SymbolName:symbol, Pos:symbol_position)

Best symbol at address ‘EA’ to be used for symbolic expressions. There can be two variants: If ‘Pos’ is “Beg”, the symbol points to the beginning of a block. If ‘Pos’ is “End”, the symbol points at the end of a block.

best_func_symbol(EA:address, SymbolName:symbol)

Best function symbol at address ‘EA’.

symbol_score(EA:address, SymbolName:symbol, Type:symbol, Pos:symbol_position, Score:unsigned)

This predicate is computed to decide which is the best symbol for symbolic expressions or the best function symbol at each address. Each symbol receives a score based on its properties.

symbol_type_score(Type:symbol, Scope:unsigned)

Auxiliary predicate to define symbol_score. Prefer symbols with type different than NOTYPE.

symbol_scope_score(Scope:symbol, Score:unsigned)

Auxiliary predicate to define symbol_score

symbol_visibility_score(Visibility:symbol, Score:unsigned)

Auxiliary predicate to define symbol_score. Prefer symbols that are not HIDDEN.

avoid_symbols(SymbolName:symbol)

This predicate records a set of symbols that should not be used in symbolic expressions. These symbols are skipped by the pprinter. TODO: maybe the pprinter could stop skipping these symbols and we could remove them from here.

elf_avoid_symbols(SymbolName:symbol)

This predicate records the set of symbols that should not be used in symbolic expressions for ELF binaries

symbol_at_section_end(EA:address, SymbolName:symbol)

An existing symbol is pointing to the end of a section rather than the beginning of the next section.

symbol_at_end(EA:address, SymbolName:symbol)

The symbol at address ‘EA’ with name ‘SymbolName’ should point at the end of a block.

symbol_before_section_beg(EA:address, SymbolName:symbol, NewEA:address)

The symbol at address ‘EA’ with name ‘SymbolName’ is pointing outside its own section and should be moved to ‘NewEA’.