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_return
Used by:
cfg_edge_to_top
Recursive:
cfg_edge
- cfg_edge_to_top(src:address, conditional:symbol, type:symbol)
This predicate specifies CFG edges from
src
to 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
Src
might access the jump table entry at addressMemory
.Uses:
code_in_block
,data_access
,data_access_pattern
,indirect_jump
Recursive:
data_object_conflict
,labeled_data_candidate
,boundary_sym_expr
,symbolic_expr_symbol_minus_symbol
,data_object
,resolved_transfer
,function_inference.function_entry
,string_candidate
,moved_data_label
,labeled_ea
,value_reg_address_before
,code_pointer_in_data
,moved_label_candidate
,symbolic_operand_point
,discarded_jump_table_entry
,data_object_total_points
,inferred_special_symbol
,data_limit
,next_data_limit
,code_in_refined_block
,data_access_limit
,symbol_minus_symbol_from_relocation
,+disconnected3
,moved_displacement_candidate
,best_func_symbol
,main_function
,data_object_point
,data_limit_after_access
,symbolic_data
,string_candidate_refined
,preferred_data_access
,address_array
,symbolic_expr
,split_block
,refined_block
,moved_label
,moved_pc_relative_candidate
,+disconnected6
,code_in_split_block
,+disconnected2
,after_address_in_data
,address_array_aux
,next_address_in_data
,best_symexpr_symbol
,data_object_candidate
,symbolic_expr_attribute
,+disconnected1
,symbolic_operand_attribute
,symbolic_operand
,got_reference
,block_needs_splitting_at
,jump_table
,label_conflict
,symbol_minus_symbol
,block_needs_merging
,relative_jump_table_entry
,base_relative_symbolic_operand
,symbol_minus_symbol_candidate
,discarded_data_object
,symbol_score
,inferred_main_function
- resolved_transfer(EA:address, Dest:address, Type:symbol)
This predicate represents known targets of indirect jumps or calls.
EA
is the address of the jump or call instruction andDest
is 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_reg
Used by:
cfg_edge
,cfg_edge_to_top
Recursive:
data_object_conflict
,labeled_data_candidate
,boundary_sym_expr
,symbolic_expr_symbol_minus_symbol
,data_object
,resolved_transfer
,function_inference.function_entry
,string_candidate
,moved_data_label
,labeled_ea
,value_reg_address_before
,code_pointer_in_data
,moved_label_candidate
,symbolic_operand_point
,discarded_jump_table_entry
,data_object_total_points
,inferred_special_symbol
,data_limit
,next_data_limit
,code_in_refined_block
,data_access_limit
,symbol_minus_symbol_from_relocation
,+disconnected3
,moved_displacement_candidate
,best_func_symbol
,main_function
,data_object_point
,data_limit_after_access
,symbolic_data
,string_candidate_refined
,preferred_data_access
,address_array
,symbolic_expr
,split_block
,refined_block
,moved_label
,moved_pc_relative_candidate
,+disconnected6
,code_in_split_block
,+disconnected2
,after_address_in_data
,address_array_aux
,next_address_in_data
,best_symexpr_symbol
,data_object_candidate
,symbolic_expr_attribute
,+disconnected1
,symbolic_operand_attribute
,symbolic_operand
,got_reference
,block_needs_splitting_at
,jump_table
,label_conflict
,symbol_minus_symbol
,block_needs_merging
,relative_jump_table_entry
,base_relative_symbolic_operand
,symbol_minus_symbol_candidate
,discarded_data_object
,symbol_score
,inferred_main_function
- 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_transfer
but 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_symbol
that captures a pointer at address ‘DataPointer’ that refers to the external symbol ‘Symbol’.