ScEpTIC.AST.transformations.virtual_memory.elements package
Submodules
ScEpTIC.AST.transformations.virtual_memory.elements.base_element module
- class ScEpTIC.AST.transformations.virtual_memory.elements.base_element.BaseASTElement
 Bases:
objectBase component of the AST structure that we use for AST transformations
- calls_checkpoint(checkpoint_function_name, ignore_nested_checkpoint=False)
 Returns if the basic block has a call to a checkpoint
- calls_to(function_names, is_checkpoint=True)
 Returns if the basic block has a call to given functions
- flatten()
 Returns a flatten representation of the element
- get_label()
 Returns element label
- get_labels()
 Returns a list of all the labels covered by the object
- get_next_labels()
 Returns labels of the elements directly reachable from the current one
- get_previous_labels()
 Returns the labels of the basic blocks that precede the current one
- get_real_next_prev()
 Returns the real next and prev (conditional entry/exit block have theirs overwritten)
- has_backward_jump()
 Returns if the basic block performs a backward jump
- has_nested_loop()
 Returns if the element has a nested loop
- jumps_after(label)
 Returns if the element can jump after a certain label
- static label_to_int(label)
 Converts a LLVM IR label to an integer representation
- reset_conditional_structure()
 Resets the book-keeping information for conditionals structures
- set_conditional_entry_label(label)
 Sets the label of the entry block
- set_conditional_exit_label(label)
 Sets the label of the exit block
ScEpTIC.AST.transformations.virtual_memory.elements.basic_block module
- class ScEpTIC.AST.transformations.virtual_memory.elements.basic_block.BasicBlock(label, function_name)
 Bases:
BaseASTElementBasic block of the AST
- add_instruction(instruction)
 Adds an instruction in the basic block
- add_next_label(label)
 Adds the label of a subsequent basic block
- add_prev_label(label)
 Adds the label of a basic block that precedes the one of this object
- all_elements = {}
 
- calls_checkpoint(checkpoint_function_name, ignore_nested_checkpoint=False)
 Returns if the basic block has a call to a checkpoint
- calls_to(function_names, is_checkpoint=True)
 Returns if the basic block has a call to given functions
- get_all_instructions_targeting_nvm(surrounding_sequence)
 Returns a list of all the instructions that target NVM contained in the element
- get_all_instructions_targeting_nvm_after(first_instruction, memory_tag, from_conditional=False)
 
- get_label()
 Returns element label
- get_memory_tag_first_reads_writes(only_nvm=False)
 - Returns two dictionaries which contains the first reads and writes instructions for each memory tag
 reads: contains the memory reads operations that happen before the first write
writes: contains the first memory write instruction
- get_memory_tag_last_reads_writes(only_nvm=False)
 - Returns two dictionaries which contains the last reads and writes instructions for each memory tag
 reads: contains the memory reads operations that happen after the last write
writes: contains the last memory write instruction
- get_nested_loops()
 Returns a list with the loop blocks contained in this element (depth 1, no nested loop of nested loops)
- has_nested_loop()
 Returns if the element has a nested loop
- static reset_all_elements()
 Resets the list of basic blocks
- str_print_instructions = False
 
ScEpTIC.AST.transformations.virtual_memory.elements.conditional_block module
- class ScEpTIC.AST.transformations.virtual_memory.elements.conditional_block.ConditionalBlock(entry_block, exit_block, paths, function_name)
 Bases:
BaseASTElementRepresentation of conditionally-executed basic blocks. This corresponds to a bifurcation in the CFG
- Entry Block
 ||
||
- Branch A Branch B
 - ||
 || Exit Block
- add_to_custom_basic_block(bb_type, instruction)
 Adds a given instruction at the end of a custom basic block
- all_elements = {}
 
- calls_checkpoint(checkpoint_function_name, ignore_nested_checkpoint=False)
 Returns if the conditional contains a basic block that calls a checkpoint
- calls_to(function_names, is_checkpoint=True)
 Returns if the conditional contains a basic block that calls given functions
- flatten()
 Returns a flatten representation of the conditional block
- get_all_instructions_targeting_nvm(surrounding_sequence)
 Returns a list of all the instructions that target NVM contained in the element
Implementation limitation: no nested conditionals (not needed for evaluation) TODO: implement for nested conditionals
- get_all_instructions_targeting_nvm_after(indexes, memory_tag)
 
- get_label()
 Returns element label
- get_labels()
 Returns the labels of all the basic blocks included inside the conditional block
- get_memory_tag_first_reads_writes(only_nvm=False)
 - Returns two dictionaries which contains the first reads and writes instructions for each memory tag
 reads: contains the memory reads operations that happen before the first write
writes: contains the first memory write instruction
- get_memory_tag_last_reads_writes(only_nvm=False)
 - Returns two dictionaries which contains the last reads and writes instructions for each memory tag
 reads: contains the memory reads operations that happen after the last write
writes: contains the last memory write instruction
- get_nested_loops()
 Returns a list with the loop blocks contained in this element (depth 1, no nested loop of nested loops)
- has_nested_loop()
 Returns if the element has a nested loop
- static reset_all_elements()
 Resets the list of conditional blocks
ScEpTIC.AST.transformations.virtual_memory.elements.loop_block module
- class ScEpTIC.AST.transformations.virtual_memory.elements.loop_block.LoopBlock(function_name)
 Bases:
BaseASTElementRepresentation of a loop in its natural form -> header, body, latch
- add_basic_block(block_type, basic_block)
 Adds a basic block in the loop
- Parameters:
 block_type – type of the basic block (header, body, latch)
basic_block – the basic block
- add_to_custom_exit_block(instruction)
 Adds a given instruction at the end of the custom exit block
- add_to_custom_preheader(instruction)
 Adds a given instruction at the end of the custom pre-header
- all_elements = {}
 
- calls_checkpoint(checkpoint_function_name, ignore_nested_checkpoint=False)
 Returns if the loop contains a basic block that calls a checkpoint
- calls_to(function_names, is_checkpoint=True)
 Returns if the loop contains a basic block that calls given functions
- flatten()
 Returns a flatten representation of the conditional block
- get_basic_blocks()
 Returns the sequence of elements contained in the header, body, and latch (in correct order)
- get_code_len()
 
- get_label()
 Returns element label
- get_labels()
 Returns the labels of all the basic blocks included inside the loop
- get_memory_tag_first_reads_writes(only_nvm=False)
 - Returns two dictionaries which contains the first reads and writes instructions for each memory tag
 reads: contains the memory reads operations that happen before the first write
writes: contains the first memory write instruction
- get_memory_tag_last_reads_writes()
 - Returns two dictionaries which contains the last reads and writes instructions for each memory tag
 reads: contains the memory reads operations that happen after the last write
writes: contains the last memory write instruction
- get_memory_tag_reads()
 
- get_memory_tag_writes()
 
- get_nested_loops()
 Returns a list with the loop blocks contained in this element (depth 1, no nested loop of nested loops)
- has_nested_loop()
 Returns if the element has a nested loop
- identify_uncertain_instructions()
 
- insert_dummy_writes(create_dummy_write)
 Inserts the dummy writes before and after the loop :param create_dummy_write function to create a dummy write
- static reset_all_elements()
 Resets the list of loop blocks
ScEpTIC.AST.transformations.virtual_memory.elements.memory_access_metadata module
- class ScEpTIC.AST.transformations.virtual_memory.elements.memory_access_metadata.CompositeMemoryAccessMetadata(memory_tag, basic_block, instruction)
 Bases:
object- set_conditional_container(conditional, path)
 Sets the conditional element that contains the basic block
- set_surrounding_sequence(surrounding_sequence)
 Sets the list of instructions where the instruction resides
- class ScEpTIC.AST.transformations.virtual_memory.elements.memory_access_metadata.MemoryAccessMetadata(basic_block, index, instruction, memory_tag, missing)
 Bases:
objectClass representing the metadata required for identifying the first/last memory read/write instructions
- set_conditional_container(conditional, path)
 Sets the conditional element that contains the basic block
- set_surrounding_sequence(surrounding_sequence)
 Sets the list of instructions where the instruction resides