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:
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
- 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:
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
- 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’.