Example #1
0
    def _is_bad_instruction(self,
                            ea,
                            bad_instructions=['j', 'b'],
                            no_clobber=[]):
        bad = False
        mnem = idc.print_insn_mnem(ea)

        if mnem and mnem[0] in bad_instructions:
            bad = True
        else:
            if idaapi.IDA_SDK_VERSION < 700:
                for register in no_clobber:
                    if (idaapi.insn_t_get_canon_feature(idaapi.cmd.itype)
                            & idaapi.CF_CHG1) == idaapi.CF_CHG1:
                        if idc.print_operand(ea, 0) == register:
                            bad = True
            else:
                insn = idaapi.insn_t()
                #insn.itype = idaapi.cmd.itype   # ml
                for register in no_clobber:
                    if (insn.get_canon_feature()
                            & idaapi.CF_CHG1) == idaapi.CF_CHG1:
                        if idc.print_operand(ea, 0) == register:
                            bad = True
        return bad
Example #2
0
	def _is_bad_instruction(self, ea, bad_instructions=['j', 'b'], no_clobber=[]):
		bad = False
		mnem = GetMnem(ea)

		if mnem and mnem[0] in bad_instructions:
			bad = True
		else:
			for register in no_clobber:
				if (idaapi.insn_t_get_canon_feature(idaapi.cmd.itype) & idaapi.CF_CHG1) == idaapi.CF_CHG1:
					if idc.GetOpnd(ea, 0) == register:
						bad = True

		return bad
Example #3
0
    def _is_bad_instruction(self, ea, bad_instructions=['j', 'b'], no_clobber=[]):
        bad = False
        mnem = GetMnem(ea)

        if mnem and mnem[0] in bad_instructions:
            bad = True
        else:
            for register in no_clobber:
                if (idaapi.insn_t_get_canon_feature(idaapi.cmd.itype) & idaapi.CF_CHG1) == idaapi.CF_CHG1:
                    if idc.GetOpnd(ea, 0) == register:
                        bad = True

        return bad
Example #4
0
    def _profile_function(self):
        current_ea = idc.ScreenEA()
        current_function = idc.GetFunctionName(current_ea)
        current_function_ea = idc.LocByName(current_function)

        if current_function:
            self.function = current_function

        ea = start_ea = idc.GetFunctionAttr(current_function_ea,
                                            idc.FUNCATTR_START)
        end_ea = idc.GetFunctionAttr(current_function_ea, idc.FUNCATTR_END)

        self.highlighted = idaapi.get_highlighted_identifier()

        while ea < end_ea and ea != idc.BADADDR and self.highlighted:

            i = 0
            match = False
            optype = self.READ
            comment = None

            idaapi.decode_insn(ea)

            mnem = idc.GetMnem(ea)

            if self.highlighted in mnem:
                match = True
            elif idaapi.is_call_insn(ea):
                for xref in idautils.XrefsFrom(ea):
                    if xref.type != 21:
                        name = idc.Name(xref.to)
                        if name and self.highlighted in name:
                            match = True
                            break
            else:
                while True:
                    opnd = idc.GetOpnd(ea, i)
                    if opnd:
                        if self.highlighted in opnd:
                            try:
                                canon_feature = idaapi.insn_t_get_canon_feature(
                                    idaapi.cmd.ityp)
                            except AttributeError:
                                insn_t = idaapi.insn_t()
                                canon_feature = insn_t.get_canon_feature()
                            match = True
                            if canon_feature & self.OPND_WRITE_FLAGS[i]:
                                optype = self.WRITE
                        i += 1
                    else:
                        break

            if not match:
                comment = idc.GetCommentEx(ea, 0)
                if comment and self.highlighted in comment:
                    match = True
                else:
                    comment = idc.GetCommentEx(ea, 1)
                    if comment and self.highlighted in comment:
                        match = True
                    else:
                        comment = None

            if match:
                if ea > current_ea:
                    direction = self.DOWN
                elif ea < current_ea:
                    direction = self.UP
                else:
                    direction = self.THIS

                self.xrefs[ea] = {
                    'offset': idc.GetFuncOffset(ea),
                    'mnem': mnem,
                    'type': optype,
                    'direction': direction,
                    'text': idc.GetDisasm(ea),
                }

            ea += idaapi.cmd.size
Example #5
0
	def _profile_function(self):
		current_ea = ScreenEA()
		current_function = idc.GetFunctionName(current_ea)
		current_function_ea = idc.LocByName(current_function)

		if current_function:
			self.function = current_function

		ea = start_ea = idc.GetFunctionAttr(current_function_ea,  idc.FUNCATTR_START)
		end_ea = idc.GetFunctionAttr(current_function_ea, idc.FUNCATTR_END)

		self.highlighted = idaapi.get_highlighted_identifier()

		while ea < end_ea and ea != idc.BADADDR and self.highlighted:

			i = 0
			match = False
			optype = self.READ
			comment = None

			idaapi.decode_insn(ea)
			
			mnem = idc.GetMnem(ea)

			if self.highlighted in mnem:
				match = True
			elif idaapi.is_call_insn(ea):
				for xref in idautils.XrefsFrom(ea):
					if xref.type != 21:
						name = idc.Name(xref.to)
						if name and self.highlighted in name:
							match = True
							break
			else:	
				while True:
					opnd = idc.GetOpnd(ea, i)
					if opnd:
						if self.highlighted in opnd:
							match = True
							if (idaapi.insn_t_get_canon_feature(idaapi.cmd.itype) & self.OPND_WRITE_FLAGS[i]):
								optype = self.WRITE
						i += 1
					else:
						break

			if not match:
				comment = idc.GetCommentEx(ea, 0)
				if comment and self.highlighted in comment:
					match = True
				else:
					comment = idc.GetCommentEx(ea, 1)
					if comment and self.highlighted in comment:
						match = True
					else:
						comment = None

			if match:
				if ea > current_ea:
					direction = self.DOWN
				elif ea < current_ea:
					direction = self.UP
				else:
					direction = self.THIS

				self.xrefs[ea] = {
					'offset' 	: idc.GetFuncOffset(ea),
					'mnem'	 	: mnem,
					'type'		: optype,
					'direction'	: direction,
					'text'		: idc.GetDisasm(ea),
				}

			ea += idaapi.cmd.size