cfg
This module generates the control flow graph of the disassembled code
- cfg_edge(src:address, dest:address, conditional:symbol, indirect:symbol, type:symbol)
This predicate specifies a CFG edge between two locations in the binary.
Uses:
arch.conditional,arch.jump,block_information,code_in_refined_block,conditional_return,direct_call,direct_jump,function_inference.in_function,loaded_section,may_fallthrough,no_return_call_propagated,nop_block,pc_load_call,plt_block,refined_block,refined_block_control_instruction,refined_block_last_instruction,resolved_transfer,unconditional_returnUsed by:
cfg_edge_to_topRecursive:
cfg_edge
- cfg_edge_to_top(src:address, conditional:symbol, type:symbol)
This predicate specifies CFG edges from
srcto a Top proxy block to model calls or jumps whose destination is unknown. This is optimistic, if at least one target of a jump/call is known, the edge to the proxy block will not be generated.
- cfg_edge_to_symbol(src:address, Symbol:symbol, conditional:symbol, indirect:symbol, type:symbol)
This predicate specifies CFG edges whose destination is an external symbol.
- jump_table(Src:address, Memory:address)
The jump at address
Srcmight access the jump table entry at addressMemory.Uses:
code_in_block,data_access,data_access_pattern,indirect_jumpRecursive:
symbolic_expr,best_symexpr_symbol,symbol_minus_symbol_from_relocation,inferred_symbol_mips,labeled_ea,moved_label_candidate,jump_table,code_in_refined_block,symbol_score,moved_label,+disconnected4,best_func_symbol,symbolic_data,data_limit,string_candidate_refined,+disconnected6,label_conflict,data_object_point,resolved_transfer,split_block,value_reg_address_before,string_candidate,discarded_jump_table_entry,symbol_minus_symbol_candidate,discarded_data_object,code_in_split_block,symbolic_operand_point,block_needs_splitting_at,next_data_limit,got_reference,preferred_data_access,address_array_aux,moved_pc_relative_candidate,data_object_conflict,symbolic_operand_attribute,symbolic_expr_attribute,moved_data_label,block_needs_merging,main_function,labeled_data_candidate,+disconnected1,inferred_special_symbol,relative_jump_table_entry,data_access_limit,data_object_candidate,symbolic_expr_symbol_minus_symbol,next_address_in_data,code_pointer_in_data,inferred_main_function,+disconnected2,refined_block,boundary_sym_expr,function_inference.function_entry,inferred_symbol,symbolic_operand,data_object,subsequent_string_candidate,symbol_minus_symbol,data_object_total_points,data_limit_after_access,address_array,after_address_in_data,moved_displacement_candidate
- resolved_transfer(EA:address, Dest:address, Type:symbol)
This predicate represents known targets of indirect jumps or calls.
EAis the address of the jump or call instruction andDestis the destination address. Type can be “branch” or “call”.
Uses:
arch.call,arch.jump,code_in_block,data_access_pattern_candidate_refined,defined_symbol,indirect_call,indirect_jump,instruction,jump_table_candidate_refined,jump_table_start,op_regdirect_contains_reg,plt_entry,reg_call,reg_def_use.def_used,reg_jump,split_load_candidate,symbolic_expr_from_relocation,value_regUsed by:
cfg_edge,cfg_edge_to_topRecursive:
symbolic_expr,best_symexpr_symbol,symbol_minus_symbol_from_relocation,inferred_symbol_mips,labeled_ea,moved_label_candidate,jump_table,code_in_refined_block,symbol_score,moved_label,+disconnected4,best_func_symbol,symbolic_data,data_limit,string_candidate_refined,+disconnected6,label_conflict,data_object_point,resolved_transfer,split_block,value_reg_address_before,string_candidate,discarded_jump_table_entry,symbol_minus_symbol_candidate,discarded_data_object,code_in_split_block,symbolic_operand_point,block_needs_splitting_at,next_data_limit,got_reference,preferred_data_access,address_array_aux,moved_pc_relative_candidate,data_object_conflict,symbolic_operand_attribute,symbolic_expr_attribute,moved_data_label,block_needs_merging,main_function,labeled_data_candidate,+disconnected1,inferred_special_symbol,relative_jump_table_entry,data_access_limit,data_object_candidate,symbolic_expr_symbol_minus_symbol,next_address_in_data,code_pointer_in_data,inferred_main_function,+disconnected2,refined_block,boundary_sym_expr,function_inference.function_entry,inferred_symbol,symbolic_operand,data_object,subsequent_string_candidate,symbol_minus_symbol,data_object_total_points,data_limit_after_access,address_array,after_address_in_data,moved_displacement_candidate
- resolved_transfer_to_symbol(EA:address, Symbol:symbol, Type:symbol)
This predicates represent known targets of indirect jumps or calls that refer to external symbols. It is similar to
resolved_transferbut its target is not an address but a symbol. ‘Type’ can be “branch” or “call”.
- pointer_to_external_symbol(DataPointer:address, Symbol:symbol)
Auxiliary predicate of
resolved_transfer_to_symbolthat captures a pointer at address ‘DataPointer’ that refers to the external symbol ‘Symbol’.