Exemple #1
0
 def __init__(self, addr):
     super(Label, self).__init__('label', [operand.AddressConstant(addr)])
     self.addr = address.fromVirtual(0)
     self.gotos = set()
     self.breaks = set()
     self.continues = set()
     self.needed = regutil.ALL_REGS - set(['FZ', 'FC', 'FN', 'FH'])
     self.depset = depend.unknown()
Exemple #2
0
    def __init__(self, addr, result=None):

        c = connection.cursor()
        c.execute('select type, depset, has_switch, suspicious_switch, has_suspicious_instr, has_nop, has_ambig_calls, length from procs where addr=?', (str(addr),))
        assert c.rowcount <= 1
        result = c.fetchone()

        self.addr = addr
        if result:
            self.type = result[0]
            self.depset = depend.decode(result[1])
            self.has_switch = result[2]
            self.suspicious_switch = result[3]
            self.has_suspicious_instr = result[4]
            self.has_nop = result[5]
            self.has_ambig_calls = result[6]
            self.length = result[7]
        else:
            self.type = "proc"
            self.depset = depend.unknown()
            self.has_switch = False
            self.suspicious_switch = False
            self.has_suspicious_instr = False
            self.has_nop = False
            self.has_ambig_calls = True
            self.length = 0

        self.calls = set()
        self.tail_calls = set()
        c.execute('select destination, type from calls where source=?', (str(addr),))
        for x in c.fetchall():
            if x[1] == 'tail':
                self.tail_calls.add(address.fromConventional(x[0]))
            else:
                self.calls.add(address.fromConventional(x[0]))

        self.memreads = set()
        self.memwrites = set()
        c.execute('select addr, type from memref where proc=?', (str(addr),))
        for x in c.fetchall():
            if x[1] == 'read':
                self.memreads.add(address.fromConventional(x[0]))
            else:
                self.memwrites.add(address.fromConventional(x[0]))

        self.callers = set()
        c.execute('select source from calls where destination=?', (str(addr),))
        for x in c.fetchall():
            self.callers.add(address.fromConventional(x[0]))

        c.close()
Exemple #3
0
 def getDependencySet(self):
     return depend.unknown()