def pop(self, index=-1) -> BitVec: """ :param index:index to be popped, same as the list() class. :returns popped value :function: same as list() class but throws StackUnderflowException for popping from an empty list """ try: return super(MachineStack, self).pop(index) except IndexError: raise StackUnderflowException("Trying to pop from an empty stack")
def __getitem__(self, item: Union[int, slice]) -> Any: """ :param item: :return: """ try: return super(MachineStack, self).__getitem__(item) except IndexError: raise StackUnderflowException( "Trying to access a stack element which doesn't exist")
def jump_(self, global_state): state = global_state.mstate disassembly = global_state.environment.code try: jump_addr = util.get_concrete_int(state.stack.pop()) except AttributeError: raise InvalidJumpDestination("Invalid jump argument (symbolic address)") except IndexError: raise StackUnderflowException() index = util.get_instruction_index(disassembly.instruction_list, jump_addr) if index is None: raise InvalidJumpDestination("JUMP to invalid address") op_code = disassembly.instruction_list[index]['opcode'] if op_code != "JUMPDEST": raise InvalidJumpDestination("Skipping JUMP to invalid destination (not JUMPDEST): " + str(jump_addr)) new_state = copy(global_state) new_state.mstate.pc = index new_state.mstate.depth += 1 return [new_state]
def __getitem__(self, item): try: return super(MachineStack, self).__getitem__(item) except IndexError: raise StackUnderflowException( "Trying to access a stack element which doesn't exist")