mirror of https://github.com/geohot/qira
ahh quality, should parameterize the stack
This commit is contained in:
parent
2104fdb0e9
commit
e66ab69a9b
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -17,7 +17,7 @@ body {
|
||||||
}
|
}
|
||||||
|
|
||||||
.halfhighlight {
|
.halfhighlight {
|
||||||
background: rgba(255, 119, 119, 0.2);
|
background: rgba(255, 119, 119, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
.control {
|
.control {
|
||||||
|
|
Loading…
Reference in New Issue