Exemple #1
0
 def run_cycle(self):
     rip = self.context.registers['rip']
     op_code = struct.unpack('<H',
                             bytes(self.context.memory[rip:rip + 2]))[0]
     rip += 2
     try:
         op_info = self.op_table[op_code]
     except:
         print('Unknown opcode')
         print(self.context.registers)
         print(self.context.memory[self.context.registers['rip']:self.
                                   context.registers['rip'] + 10])
         print(self.context.memory)
         exit()
     op_args = []
     for i in range(op_info[1]):  # for each argument
         arg_code = op_info[2 + i]
         value = 0
         if 10 <= arg_code <= 11:
             value = self.context.memory[
                 rip:rip +
                 4]  # struct.unpack('<I', bytes(self.context.memory[rip:rip + 4]))
             rip += 4
         op_args.append(MemOperand(self.context, arg_code, value))
     operation = Operation(self.context, op_info[0])
     self.context.registers['rip'] = rip
     operation.exec(op_args)