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)