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.
Uses:
address_in_data,base_address,binary_format,binary_type,bss_section,entry_point,function_symbol,got_reference_pointer,instruction,loaded_section,op_immediate,pc_relative_operand,relocation,start_function,symbolUsed by:
abi_intrinsic,inferred_symbolRecursive:
symbol_score,discarded_jump_table_entry,symbolic_data,split_block,+disconnected3,data_limit,data_object_conflict,discarded_data_object,moved_pc_relative_candidate,inferred_special_symbol,symbol_minus_symbol_from_relocation,best_symexpr_symbol,preferred_data_access,symbolic_expr,data_limit_after_access,symbolic_expr_attribute,next_address_in_data,symbolic_operand,symbol_minus_symbol,code_in_split_block,inferred_main_function,resolved_transfer,base_relative_symbolic_operand,label_conflict,relative_jump_table_entry,data_access_limit,function_inference.function_entry,+disconnected6,string_candidate_refined,+disconnected2,moved_label_candidate,moved_label,moved_displacement_candidate,symbolic_operand_point,data_object_candidate,data_object,value_reg_address_before,block_needs_merging,data_object_total_points,data_object_point,symbol_minus_symbol_candidate,address_array_aux,symbolic_operand_attribute,main_function,address_array,labeled_ea,best_func_symbol,next_data_limit,moved_data_label,labeled_data_candidate,boundary_sym_expr,+disconnected1,refined_block,jump_table,block_needs_splitting_at,got_reference,code_in_refined_block,symbolic_expr_symbol_minus_symbol,code_pointer_in_data,string_candidate,after_address_in_data
- 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.
Used by:
cfi_directiveRecursive:
symbol_score,discarded_jump_table_entry,symbolic_data,split_block,+disconnected3,data_limit,data_object_conflict,discarded_data_object,moved_pc_relative_candidate,inferred_special_symbol,symbol_minus_symbol_from_relocation,best_symexpr_symbol,preferred_data_access,symbolic_expr,data_limit_after_access,symbolic_expr_attribute,next_address_in_data,symbolic_operand,symbol_minus_symbol,code_in_split_block,inferred_main_function,resolved_transfer,base_relative_symbolic_operand,label_conflict,relative_jump_table_entry,data_access_limit,function_inference.function_entry,+disconnected6,string_candidate_refined,+disconnected2,moved_label_candidate,moved_label,moved_displacement_candidate,symbolic_operand_point,data_object_candidate,data_object,value_reg_address_before,block_needs_merging,data_object_total_points,data_object_point,symbol_minus_symbol_candidate,address_array_aux,symbolic_operand_attribute,main_function,address_array,labeled_ea,best_func_symbol,next_data_limit,moved_data_label,labeled_data_candidate,boundary_sym_expr,+disconnected1,refined_block,jump_table,block_needs_splitting_at,got_reference,code_in_refined_block,symbolic_expr_symbol_minus_symbol,code_pointer_in_data,string_candidate,after_address_in_data
- best_func_symbol(EA:address, SymbolName:symbol)
Best function symbol at address ‘EA’.
Uses:
binary_formatUsed by:
function_inference.function_entry_name,inferred_symbolRecursive:
symbol_score,discarded_jump_table_entry,symbolic_data,split_block,+disconnected3,data_limit,data_object_conflict,discarded_data_object,moved_pc_relative_candidate,inferred_special_symbol,symbol_minus_symbol_from_relocation,best_symexpr_symbol,preferred_data_access,symbolic_expr,data_limit_after_access,symbolic_expr_attribute,next_address_in_data,symbolic_operand,symbol_minus_symbol,code_in_split_block,inferred_main_function,resolved_transfer,base_relative_symbolic_operand,label_conflict,relative_jump_table_entry,data_access_limit,function_inference.function_entry,+disconnected6,string_candidate_refined,+disconnected2,moved_label_candidate,moved_label,moved_displacement_candidate,symbolic_operand_point,data_object_candidate,data_object,value_reg_address_before,block_needs_merging,data_object_total_points,data_object_point,symbol_minus_symbol_candidate,address_array_aux,symbolic_operand_attribute,main_function,address_array,labeled_ea,best_func_symbol,next_data_limit,moved_data_label,labeled_data_candidate,boundary_sym_expr,+disconnected1,refined_block,jump_table,block_needs_splitting_at,got_reference,code_in_refined_block,symbolic_expr_symbol_minus_symbol,code_pointer_in_data,string_candidate,after_address_in_data
- 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.
Uses:
ambiguous_symbol,avoid_symbols,defined_symbol,relocation,symbol_at_section_end,symbol_scope_score,symbol_type_score,symbol_visibility_scoreUsed by:
inferred_symbolRecursive:
symbol_score,discarded_jump_table_entry,symbolic_data,split_block,+disconnected3,data_limit,data_object_conflict,discarded_data_object,moved_pc_relative_candidate,inferred_special_symbol,symbol_minus_symbol_from_relocation,best_symexpr_symbol,preferred_data_access,symbolic_expr,data_limit_after_access,symbolic_expr_attribute,next_address_in_data,symbolic_operand,symbol_minus_symbol,code_in_split_block,inferred_main_function,resolved_transfer,base_relative_symbolic_operand,label_conflict,relative_jump_table_entry,data_access_limit,function_inference.function_entry,+disconnected6,string_candidate_refined,+disconnected2,moved_label_candidate,moved_label,moved_displacement_candidate,symbolic_operand_point,data_object_candidate,data_object,value_reg_address_before,block_needs_merging,data_object_total_points,data_object_point,symbol_minus_symbol_candidate,address_array_aux,symbolic_operand_attribute,main_function,address_array,labeled_ea,best_func_symbol,next_data_limit,moved_data_label,labeled_data_candidate,boundary_sym_expr,+disconnected1,refined_block,jump_table,block_needs_splitting_at,got_reference,code_in_refined_block,symbolic_expr_symbol_minus_symbol,code_pointer_in_data,string_candidate,after_address_in_data
- symbol_type_score(Type:symbol, Scope:unsigned)
Auxiliary predicate to define
symbol_score. Prefer symbols with type different than NOTYPE.Uses:
symbolUsed by:
symbol_score
- symbol_scope_score(Scope:symbol, Score:unsigned)
Auxiliary predicate to define
symbol_scoreUses:
symbolUsed by:
symbol_score
- symbol_visibility_score(Visibility:symbol, Score:unsigned)
Auxiliary predicate to define
symbol_score. Prefer symbols that are not HIDDEN.Uses:
symbolUsed by:
ifunc_symbol_score,symbol_score
- 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.
Uses:
arm_sym,binary_format,data_sym,elf_avoid_symbols,thumb_symUsed by:
symbol_score
- elf_avoid_symbols(SymbolName:symbol)
This predicate records the set of symbols that should not be used in symbolic expressions for ELF binaries
Used by:
avoid_symbols
- 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.
Used by:
symbol_score
- symbol_at_end(EA:address, SymbolName:symbol)
The symbol at address ‘EA’ with name ‘SymbolName’ should point at the end of a block.
Uses:
inferred_symbol,section,symbol
- 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’.