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):
return set(map(lambda x: x['address'], filter(is_load, trace.db.fetch_changes_by_clnum(clnum, 100))))
clnum = inclnum
st = get_loads(clnum)
cls = [clnum]
# so only things before this can affect it
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:
break
overwrite = st.intersection(get_stores(clnum))
@ -371,7 +374,7 @@ def slice(trace, inclnum):
clnum -= 1
cls = set(cls)
cls.remove(inclnum)
cls.discard(inclnum)
return list(cls)

View File

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

View File

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