def tokens(self):
     """MLIL tokens (read-only)"""
     count = ctypes.c_ulonglong()
     tokens = ctypes.POINTER(core.BNInstructionTextToken)()
     if ((self.instr_index is not None)
             and (self.function.source_function is not None) and
         (self.expr_index == core.BNGetMediumLevelILIndexForInstruction(
             self.function.handle, self.instr_index))):
         if not core.BNGetMediumLevelILInstructionText(
                 self.function.handle, self.function.source_function.handle,
                 self.function.arch.handle, self.instr_index, tokens,
                 count):
             return None
     else:
         if not core.BNGetMediumLevelILExprText(
                 self.function.handle, self.function.arch.handle,
                 self.expr_index, tokens, count):
             return None
     result = []
     for i in xrange(0, count.value):
         token_type = InstructionTextTokenType(tokens[i].type)
         text = tokens[i].text
         value = tokens[i].value
         size = tokens[i].size
         operand = tokens[i].operand
         context = tokens[i].context
         confidence = tokens[i].confidence
         address = tokens[i].address
         result.append(
             function.InstructionTextToken(token_type, text, value, size,
                                           operand, context, address,
                                           confidence))
     core.BNFreeInstructionText(tokens, count.value)
     return result
示例#2
0
	def __getitem__(self, i):
		if isinstance(i, slice) or isinstance(i, tuple):
			raise IndexError("expected integer instruction index")
		if isinstance(i, MediumLevelILExpr):
			return MediumLevelILInstruction(self, i.index)
		if (i < 0) or (i >= len(self)):
			raise IndexError("index out of range")
		return MediumLevelILInstruction(self, core.BNGetMediumLevelILIndexForInstruction(self.handle, i), i)