Exemplo n.º 1
0
	def get_disassembly_text(self, settings=None):
		"""
		``get_disassembly_text`` returns a list of function.DisassemblyTextLine objects for the current basic block.
		:Example:

			>>>current_basic_block.get_disassembly_text()
			[<0x100000f30: _main:>, <0x100000f30: push    rbp>, ... ]
		"""
		settings_obj = None
		if settings:
			settings_obj = settings.handle

		count = ctypes.c_ulonglong()
		lines = core.BNGetBasicBlockDisassemblyText(self.handle, settings_obj, count)
		result = []
		for i in xrange(0, count.value):
			addr = lines[i].addr
			tokens = []
			for j in xrange(0, lines[i].count):
				token_type = InstructionTextTokenType(lines[i].tokens[j].type)
				text = lines[i].tokens[j].text
				value = lines[i].tokens[j].value
				size = lines[i].tokens[j].size
				operand = lines[i].tokens[j].operand
				tokens.append(function.InstructionTextToken(token_type, text, value, size, operand))
			result.append(function.DisassemblyTextLine(addr, tokens))
		core.BNFreeDisassemblyTextLines(lines, count.value)
		return result
Exemplo n.º 2
0
    def get_disassembly_text(self, settings=None):
        """
		``get_disassembly_text`` returns a list of function.DisassemblyTextLine objects for the current basic block.

		:param DisassemblySettings settings: (optional) DisassemblySettings object
		:Example:

			>>> current_basic_block.get_disassembly_text()
			[<0x100000f30: _main:>, <0x100000f30: push    rbp>, ... ]
		"""
        settings_obj = None
        if settings:
            settings_obj = settings.handle

        count = ctypes.c_ulonglong()
        lines = core.BNGetBasicBlockDisassemblyText(self.handle, settings_obj,
                                                    count)
        result = []
        for i in xrange(0, count.value):
            addr = lines[i].addr
            if (lines[i].instrIndex != 0xffffffffffffffff) and hasattr(
                    self, 'il_function'):
                il_instr = self.il_function[lines[i].instrIndex]
            else:
                il_instr = None
            tokens = []
            for j in xrange(0, lines[i].count):
                token_type = InstructionTextTokenType(lines[i].tokens[j].type)
                text = lines[i].tokens[j].text
                value = lines[i].tokens[j].value
                size = lines[i].tokens[j].size
                operand = lines[i].tokens[j].operand
                context = lines[i].tokens[j].context
                confidence = lines[i].tokens[j].confidence
                address = lines[i].tokens[j].address
                tokens.append(
                    function.InstructionTextToken(token_type, text, value,
                                                  size, operand, context,
                                                  address, confidence))
            result.append(function.DisassemblyTextLine(addr, tokens, il_instr))
        core.BNFreeDisassemblyTextLines(lines, count.value)
        return result