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:
refined_block,data_limit_after_access,moved_pc_relative_candidate,symbolic_expr,symbolic_operand,symbolic_operand_point,data_object,+disconnected6,data_limit,after_address_in_data,discarded_jump_table_entry,moved_data_label,best_func_symbol,inferred_symbol_mips,relative_jump_table_entry,string_candidate_refined,discarded_data_object,+disconnected1,address_array_aux,next_data_limit,preferred_data_access,label_conflict,symbolic_operand_attribute,main_function,block_needs_splitting_at,symbolic_expr_attribute,data_access_limit,boundary_sym_expr,symbolic_expr_symbol_minus_symbol,labeled_data_candidate,string_candidate,data_object_conflict,moved_label_candidate,labeled_ea,data_object_point,jump_table,function_inference.function_entry,+disconnected4,inferred_special_symbol,value_reg_address_before,code_in_split_block,+disconnected2,resolved_transfer,moved_displacement_candidate,symbolic_data,code_pointer_in_data,best_symexpr_symbol,next_address_in_data,symbol_minus_symbol_candidate,symbol_score,inferred_symbol,data_object_candidate,block_needs_merging,symbol_minus_symbol_from_relocation,data_object_total_points,inferred_main_function,symbol_minus_symbol,code_in_refined_block,moved_label,got_reference,split_block,address_array
- 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:
refined_block,data_limit_after_access,moved_pc_relative_candidate,symbolic_expr,symbolic_operand,symbolic_operand_point,data_object,+disconnected6,data_limit,after_address_in_data,discarded_jump_table_entry,moved_data_label,best_func_symbol,inferred_symbol_mips,relative_jump_table_entry,string_candidate_refined,discarded_data_object,+disconnected1,address_array_aux,next_data_limit,preferred_data_access,label_conflict,symbolic_operand_attribute,main_function,block_needs_splitting_at,symbolic_expr_attribute,data_access_limit,boundary_sym_expr,symbolic_expr_symbol_minus_symbol,labeled_data_candidate,string_candidate,data_object_conflict,moved_label_candidate,labeled_ea,data_object_point,jump_table,function_inference.function_entry,+disconnected4,inferred_special_symbol,value_reg_address_before,code_in_split_block,+disconnected2,resolved_transfer,moved_displacement_candidate,symbolic_data,code_pointer_in_data,best_symexpr_symbol,next_address_in_data,symbol_minus_symbol_candidate,symbol_score,inferred_symbol,data_object_candidate,block_needs_merging,symbol_minus_symbol_from_relocation,data_object_total_points,inferred_main_function,symbol_minus_symbol,code_in_refined_block,moved_label,got_reference,split_block,address_array
- 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’.