ahh quality, should parameterize the stack

This commit is contained in:
George Hotz 2014-08-04 16:11:05 +00:00
parent 2104fdb0e9
commit e66ab69a9b
4 changed files with 15 additions and 6 deletions

View File

@ -347,12 +347,15 @@ def slice(trace, inclnum):
def get_loads(clnum): def get_loads(clnum):
return set(map(lambda x: x['address'], filter(is_load, trace.db.fetch_changes_by_clnum(clnum, 100)))) return set(map(lambda x: x['address'], filter(is_load, trace.db.fetch_changes_by_clnum(clnum, 100))))
clnum = inclnum clnum = inclnum
st = get_loads(clnum) st = get_loads(clnum)
cls = [clnum] cls = [clnum]
# so only things before this can affect it # so only things before this can affect it
while clnum > max(0, inclnum-100): while clnum > max(0, inclnum-100):
st.discard(0x10) # never follow the stack, X86 HAXX
if len(trace.db.fetch_changes_by_clnum(clnum, 100)) > 20: if len(trace.db.fetch_changes_by_clnum(clnum, 100)) > 20:
break break
overwrite = st.intersection(get_stores(clnum)) overwrite = st.intersection(get_stores(clnum))
@ -371,7 +374,7 @@ def slice(trace, inclnum):
clnum -= 1 clnum -= 1
cls = set(cls) cls = set(cls)
cls.remove(inclnum) cls.discard(inclnum)
return list(cls) return list(cls)

View File

@ -3,3 +3,9 @@ def ghex(a):
return None return None
return hex(a).strip("L") return hex(a).strip("L")
def fhex(a):
try:
return int(a, 16)
except:
return None

View File

@ -102,8 +102,8 @@ def forkat(forknum, clnum, pending):
REGSIZE = program.tregs[1] REGSIZE = program.tregs[1]
dat = [] dat = []
for p in pending: for p in pending:
daddr = int(p['daddr'], 16) daddr = fhex(p['daddr'])
ddata = int(p['ddata'], 16) ddata = fhex(p['ddata'])
if len(p['ddata']) > 4: if len(p['ddata']) > 4:
# ugly hack # ugly hack
dsize = REGSIZE dsize = REGSIZE
@ -197,7 +197,7 @@ def getchanges(forknum, address, typ):
if forknum != -1 and forknum not in program.traces: if forknum != -1 and forknum not in program.traces:
return return
debug() debug()
address = int(address, 16) address = fhex(address)
if forknum == -1: if forknum == -1:
forknums = program.traces.keys() forknums = program.traces.keys()
@ -245,7 +245,7 @@ def getmemory(forknum, clnum, address, ln):
if clnum == None or address == None or ln == None: if clnum == None or address == None or ln == None:
return return
debug() debug()
address = int(address, 16) address = fhex(address)
dat = trace.fetch_memory(clnum, address, ln) dat = trace.fetch_memory(clnum, address, ln)
ret = {'address': address, 'len': ln, 'dat': dat, 'is_big_endian': program.tregs[2], 'ptrsize': program.tregs[1]} ret = {'address': address, 'len': ln, 'dat': dat, 'is_big_endian': program.tregs[2], 'ptrsize': program.tregs[1]}
emit('memory', ret) emit('memory', ret)

View File

@ -17,7 +17,7 @@ body {
} }
.halfhighlight { .halfhighlight {
background: rgba(255, 119, 119, 0.2); background: rgba(255, 119, 119, 0.3);
} }
.control { .control {